Not all terminals come with the Bluetooth printer service pre-installed. Before proceeding, ensure you download and install the bluetooth printer service APK.
The Bluetooth printer service facilitates printing images and text using Bluetooth APIs. This service operates by connecting with Bluetooth printers and sending data for printing. Data is typically formatted as image and text documents.
Getting Started with Development:
To build the Bluetooth printer service, you can use Gradle. Execute the gradle build command or use the "Import Project" option in Android Studio to get started.
Copy public void openBluetooth( Activity activity) {
Intent enableBtIntent = new Intent( BluetoothAdapter . ACTION_REQUEST_ENABLE ) ;
activity . startActivityForResult (enableBtIntent , 1 );
}
public void closeBluetooth() {
this . bluetoothAdapter . disable ();
}
public void searchDevices() {
this . bluetoothAdapter . startDiscovery ();
}
private BroadcastReceiver receiver = new BroadcastReceiver() {
ProgressDialog progressDialog = null ;
@ Override
public void onReceive ( Context context , Intent intent) {
String action = intent . getAction ();
if ( BluetoothDevice . ACTION_FOUND . equals (action)) {
BluetoothDevice device = intent . getParcelableExtra ( BluetoothDevice . EXTRA_DEVICE );
if ( device . getBondState () == BluetoothDevice . BOND_BONDED ) {
addBondDevice(device) ;
} else {
addUnbondDevice(device) ;
}
} else if ( BluetoothDevice . ACTION_ACL_CONNECTED . equals (action)) {
BluetoothDevice device = intent . getParcelableExtra ( BluetoothDevice . EXTRA_DEVICE );
String msg = "ACTION_ACL_CONNECTED: " + device . getAddress () + "=" + device . getBondState ();
Toast . makeText (context , msg , Toast . LENGTH_LONG ) . show ();
System . out . println (msg);
} else if ( BluetoothAdapter . ACTION_DISCOVERY_STARTED . equals (action)) {
progressDialog = ProgressDialog . show (context , "pair..." , "..." , true );
} else if ( BluetoothAdapter . ACTION_DISCOVERY_FINISHED . equals (action)) {
bluetoothAdapter . cancelDiscovery ();
if (progressDialog != null )
progressDialog . dismiss ();
addUnbondDevicesToListView() ;
addBondDevicesToListView() ;
} else if ( BluetoothAdapter . ACTION_STATE_CHANGED . equals (action)) {
int state = bluetoothAdapter . getState ();
if (state == BluetoothAdapter . STATE_ON ) {
searchDevices . setEnabled ( true );
bondDevicesListView . setEnabled ( true );
unbondDevicesListView . setEnabled ( true );
} else if (state == BluetoothAdapter . STATE_OFF ) {
searchDevices . setEnabled ( false );
bondDevicesListView . setEnabled ( false );
unbondDevicesListView . setEnabled ( false );
} else {
System . out . println ( "Bluetooth.STATE: " + state);
}
} else {
System . out . println ( "Bluetooth.ACTION: " + action);
}
}
};
Copy public boolean connect() {
if ( ! isConnected) {
try {
bluetoothSocket = createBluetoothSocket() ;
bluetoothSocket . connect ();
outputStream = bluetoothSocket . getOutputStream ();
isConnected = bluetoothSocket . isConnected ();
if ( this . bluetoothAdapter . isDiscovering ()) {
Toast . makeText ( this . context , "success to connect" , 1 ) . show ();
this . bluetoothAdapter . isDiscovering ();
}
} catch ( Exception e) {
e . printStackTrace ();
Toast . makeText ( this . context , "fail to connect" , 1 ) . show ();
return false ;
}
}
Toast . makeText ( this . context , this . device . getName () + "connected" , Toast . LENGTH_SHORT ) . show ();
return true ;
}
private BluetoothSocket createBluetoothSocket()
throws IOException , NoSuchMethodException , IllegalAccessException , InvocationTargetException {
switch (TYPE_OF_CREATING_SOCKET) {
case 0 : return device . createRfcommSocketToServiceRecord (uuid);
case 1 : return device . createInsecureRfcommSocketToServiceRecord (uuid);
default:
Method m = device . getClass () . getMethod ( "createRfcommSocket" , new Class [] { int . class });
return (BluetoothSocket) m . invoke (device , 1 );
}
}
Copy final byte [][] byteCommands = { { 0x1b , 0x40 } , //printer commands(ESC commands)
{ 0x1b , 0x4d , 0x00 } ,
{ 0x1b , 0x4d , 0x01 } ,
{ 0x1d , 0x21 , 0x00 } ,
{ 0x1d , 0x21 , 0x11 } ,
{ 0x1b , 0x45 , 0x00 } ,
{ 0x1b , 0x45 , 0x01 } ,
{ 0x1b , 0x7b , 0x00 } ,
{ 0x1b , 0x7b , 0x01 } ,
{ 0x1d , 0x42 , 0x00 } ,
{ 0x1d , 0x42 , 0x01 } ,
{ 0x1b , 0x56 , 0x00 } ,
{ 0x1b , 0x56 , 0x01 } ,
public void selectCommand() {
new AlertDialog . Builder (context) . setTitle ( "Commands" ) . setItems (items , new DialogInterface . OnClickListener () {
@ Override
public void onClick( DialogInterface dialog , int which) {
if (isConnected) {
try {
outputStream . write (byteCommands[which]);
} catch ( IOException e) {
Toast . makeText (context , "write exception" , Toast . LENGTH_SHORT ) . show ();
}
} else {
Toast . makeText (context , "connection is lost" , Toast . LENGTH_SHORT ) . show ();
}
}
}) . create () . show ();
}
public void write( byte [] buff) {
try {
outputStream . write (buff);
} catch ( IOException e) {
}
}