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.
Service Startup Process:
Turning on Bluetooth: Automatically activates Bluetooth if it's not already on.
Scanning for Devices: Discovers nearby Bluetooth devices.
Pairing: Selects and pairs with a Bluetooth printer.
Connecting: Establishes a connection using the Serial Port Profile (SPP).
Data Transmission: Sends data in the form of ESC commands.
Printing: Executes the print command for the transmitted data.
Prerequisites for Use:
Android SDK 24
Android Build Tools v27.0.0
Android Support Repository
ZXing (for barcode processing)
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.
Code snippet
Basic API of Bluetooth
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);
}
}
};
Connection with SPP
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);
}
}