1 Open Android Studio. 2 Go to File => New => New Project. Write application name . Then, check Include Kotlin Support and click next button. 3Select minimum SDK you need. However, we have selected 17 as minimum SDK. Then, click next button 4 Then, select Empty Activity => click next => click finish. 5 You will get a newly created project successfully if you have followed steps properly.
Main.java
import java.io.IOException; import java.io.OutputStream; import java.nio.ByteBuffer; import java.util.Set; import java.util.UUID; import android.app.Activity; import android.app.ProgressDialog; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothSocket; import android.content.Intent; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.util.Log; import android.view.View; import android.view.Window; import android.view.WindowManager; import android.widget.Button; import android.widget.Toast; public class Main extends Activity implements Runnable { protected static final String TAG = "TAG"; private static final int REQUEST_CONNECT_DEVICE = 1; private static final int REQUEST_ENABLE_BT = 2; Button mScan, mPrint, mDisc; BluetoothAdapter mBluetoothAdapter; private UUID applicationUUID = UUID .fromString("00001101-0000-1000-8000-00805F9B34FB"); private ProgressDialog mBluetoothConnectProgressDialog; private BluetoothSocket mBluetoothSocket; BluetoothDevice mBluetoothDevice; @Override public void onCreate(Bundle mSavedInstanceState) { super.onCreate(mSavedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.main); mScan = (Button) findViewById(R.id.Scan); mScan.setOnClickListener(new View.OnClickListener() { public void onClick(View mView) { mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); if (mBluetoothAdapter == null) { Toast.makeText(Main.this, "Message1", 2000).show(); } else { if (!mBluetoothAdapter.isEnabled()) { Intent enableBtIntent = new Intent( BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT); } else { ListPairedDevices(); Intent connectIntent = new Intent(Main.this, DeviceListActivity.class); startActivityForResult(connectIntent, REQUEST_CONNECT_DEVICE); } } } }); mPrint = (Button) findViewById(R.id.mPrint); mPrint.setOnClickListener(new View.OnClickListener() { public void onClick(View mView) { Thread t = new Thread() { public void run() { try { OutputStream os = mBluetoothSocket .getOutputStream(); String BILL = ""; BILL = "nInvoice No: 00000000000000000 " + " " + "04-08-2011n"; BILL = BILL + "-----------------------------------------"; BILL = BILL + "nn"; BILL = BILL + "Total Qty:" + " " + "1.0n"; BILL = BILL + "Total Value:" + " " + "80000.0n"; BILL = BILL + "-----------------------------------------n"; os.write(BILL.getBytes()); //This is printer specific code you can comment ==== > Start // Setting height int gs = 29; os.write(intToByteArray(gs)); int h = 104; os.write(intToByteArray(h)); int n = 162; os.write(intToByteArray(n)); // Setting Width int gs_width = 29; os.write(intToByteArray(gs_width)); int w = 119; os.write(intToByteArray(w)); int n_width = 2; os.write(intToByteArray(n_width)); // Print BarCode int gs1 = 29; os.write(intToByteArray(gs1)); int k = 107; os.write(intToByteArray(k)); int m = 73; os.write(intToByteArray(m)); String barCodeVal = "ASDFC028060000005";// "HELLO12345678912345012"; System.out.println("Barcode Length : " + barCodeVal.length()); int n1 = barCodeVal.length(); os.write(intToByteArray(n1)); for (int i = 0; i < barCodeVal.length(); i++) { os.write((barCodeVal.charAt(i) + "").getBytes()); } //printer specific code you can comment ==== > End } catch (Exception e) { Log.e("Main", "Exe ", e); } } }; t.start(); } }); mDisc = (Button) findViewById(R.id.dis); mDisc.setOnClickListener(new View.OnClickListener() { public void onClick(View mView) { if (mBluetoothAdapter != null) mBluetoothAdapter.disable(); } }); }// onCreate @Override protected void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); try { if (mBluetoothSocket != null) mBluetoothSocket.close(); } catch (Exception e) { Log.e("Tag", "Exe ", e); } } @Override public void onBackPressed() { try { if (mBluetoothSocket != null) mBluetoothSocket.close(); } catch (Exception e) { Log.e("Tag", "Exe ", e); } setResult(RESULT_CANCELED); finish(); } public void onActivityResult(int mRequestCode, int mResultCode, Intent mDataIntent) { super.onActivityResult(mRequestCode, mResultCode, mDataIntent); switch (mRequestCode) { case REQUEST_CONNECT_DEVICE: if (mResultCode == Activity.RESULT_OK) { Bundle mExtra = mDataIntent.getExtras(); String mDeviceAddress = mExtra.getString("DeviceAddress"); Log.v(TAG, "Coming incoming address " + mDeviceAddress); mBluetoothDevice = mBluetoothAdapter .getRemoteDevice(mDeviceAddress); mBluetoothConnectProgressDialog = ProgressDialog.show(this, "Connecting...", mBluetoothDevice.getName() + " : " + mBluetoothDevice.getAddress(), true, false); Thread mBlutoothConnectThread = new Thread(this); mBlutoothConnectThread.start(); // pairToDevice(mBluetoothDevice); This method is replaced by // progress dialog with thread } break; case REQUEST_ENABLE_BT: if (mResultCode == Activity.RESULT_OK) { ListPairedDevices(); Intent connectIntent = new Intent(Main.this, DeviceListActivity.class); startActivityForResult(connectIntent, REQUEST_CONNECT_DEVICE); } else { Toast.makeText(Main.this, "Message", 2000).show(); } break; } } private void ListPairedDevices() { Set<BluetoothDevice> mPairedDevices = mBluetoothAdapter .getBondedDevices(); if (mPairedDevices.size() > 0) { for (BluetoothDevice mDevice : mPairedDevices) { Log.v(TAG, "PairedDevices: " + mDevice.getName() + " " + mDevice.getAddress()); } } } public void run() { try { mBluetoothSocket = mBluetoothDevice .createRfcommSocketToServiceRecord(applicationUUID); mBluetoothAdapter.cancelDiscovery(); mBluetoothSocket.connect(); mHandler.sendEmptyMessage(0); } catch (IOException eConnectException) { Log.d(TAG, "CouldNotConnectToSocket", eConnectException); closeSocket(mBluetoothSocket); return; } } private void closeSocket(BluetoothSocket nOpenSocket) { try { nOpenSocket.close(); Log.d(TAG, "SocketClosed"); } catch (IOException ex) { Log.d(TAG, "CouldNotCloseSocket"); } } private Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { mBluetoothConnectProgressDialog.dismiss(); Toast.makeText(Main.this, "DeviceConnected", 5000).show(); } }; public static byte intToByteArray(int value) { byte[] b = ByteBuffer.allocate(4).putInt(value).array(); for (int k = 0; k < b.length; k++) { System.out.println("Selva [" + k + "] = " + "0x" + UnicodeFormatter.byteToHex(b[k])); } return b[3]; } public byte[] sel(int val) { ByteBuffer buffer = ByteBuffer.allocate(2); buffer.putInt(val); buffer.flip(); return buffer.array(); } }
UnicodeFormatter.java
import java.io.*; public class UnicodeFormatter { static public String byteToHex(byte b) { // Returns hex String representation of byte b char hexDigit[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; char[] array = { hexDigit[(b >> 4) & 0x0f], hexDigit[b & 0x0f] }; return new String(array); } static public String charToHex(char c) { // Returns hex String representation of char c byte hi = (byte) (c >>> 8); byte lo = (byte) (c & 0xff); return byteToHex(hi) + byteToHex(lo); } } // class
DeviceListActivity.java
import java.util.Set; import android.app.Activity; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.Window; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.TextView; import android.widget.AdapterView.OnItemClickListener; public class DeviceListActivity extends Activity { protected static final String TAG = "TAG"; private BluetoothAdapter mBluetoothAdapter; private ArrayAdapter<String> mPairedDevicesArrayAdapter; @Override protected void onCreate(Bundle mSavedInstanceState) { super.onCreate(mSavedInstanceState); requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); setContentView(R.layout.device_list); setResult(Activity.RESULT_CANCELED); mPairedDevicesArrayAdapter = new ArrayAdapter<String>(this, R.layout.device_name); ListView mPairedListView = (ListView) findViewById(R.id.paired_devices); mPairedListView.setAdapter(mPairedDevicesArrayAdapter); mPairedListView.setOnItemClickListener(mDeviceClickListener); mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); Set<BluetoothDevice> mPairedDevices = mBluetoothAdapter.getBondedDevices(); if (mPairedDevices.size() > 0) { findViewById(R.id.title_paired_devices).setVisibility(View.VISIBLE); for (BluetoothDevice mDevice : mPairedDevices) { mPairedDevicesArrayAdapter.add(mDevice.getName() + "n" + mDevice.getAddress()); } } else { String mNoDevices = "None Paired";//getResources().getText(R.string.none_paired).toString(); mPairedDevicesArrayAdapter.add(mNoDevices); } } @Override protected void onDestroy() { super.onDestroy(); if (mBluetoothAdapter != null) { mBluetoothAdapter.cancelDiscovery(); } } private OnItemClickListener mDeviceClickListener = new OnItemClickListener() { public void onItemClick(AdapterView<?> mAdapterView, View mView, int mPosition, long mLong) { mBluetoothAdapter.cancelDiscovery(); String mDeviceInfo = ((TextView) mView).getText().toString(); String mDeviceAddress = mDeviceInfo.substring(mDeviceInfo.length() - 17); Log.v(TAG, "Device_Address " + mDeviceAddress); Bundle mBundle = new Bundle(); mBundle.putString("DeviceAddress", mDeviceAddress); Intent mBackIntent = new Intent(); mBackIntent.putExtras(mBundle); setResult(Activity.RESULT_OK, mBackIntent); finish(); } }; }
main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> <Button android:text="Scan" android:id="@+id/Scan" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button> <Button android:text="Print" android:id="@+id/mPrint" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button> <Button android:text="Dissable" android:id="@+id/dis" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button> </LinearLayout>
device_name.xml
<?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textSize="18sp" android:padding="5dip" />
device_list.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:id="@+id/title_paired_devices" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="My Text" android:visibility="gone" android:background="#666" android:textColor="#fff" android:paddingLeft="5dip" /> <ListView android:id="@+id/paired_devices" android:layout_width="fill_parent" android:layout_height="wrap_content" android:stackFromBottom="true" android:layout_weight="1" /> </LinearLayout>
Manifest
<uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />