How to Use the Terminal's Bluetooth Printer Service: Difference between revisions

From wizarPOS
No edit summary
Line 1: Line 1:
<big>'''Please note that not every terminal is pre-installed with Bluetooth printer service. Please download and install [http://ftp.wizarpos.com/advanceSDK/BtPrintPatch-v15-release-q1_platform.apk Bluetooth printer service APK] firstly.'''
== Initial Setup: ==
</big>
Not all terminals come with the Bluetooth printer service pre-installed. Before proceeding, ensure you download and install the [http://ftp.wizarpos.com/advanceSDK/BtPrintPatch-v15-release-q1_platform.apk Bluetooth printer service APK].
 
== Service Overview: ==
This service demonstrates how to print images or text using a set of Bluetooth APIs. The start-up process of Bluetooth printer service includes: turning on Bluetooth, scanning the surrounding Bluetooth devices, pairing with Bluetooth devices, connecting with devices through SPP, and then sending data, which is always displayed in the form of image and text documents, and printing data.
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: ==
== Introduction ==
# '''Turning on Bluetooth:''' Automatically activates Bluetooth if it's not already on.
 
# '''Scanning for Devices:''' Discovers nearby Bluetooth devices.
Bluetooth printer service, which establishes a connection with the Bluetooth printer, sends data to the Bluetooth printer through the connection, and then prints the data. The connection is established by a terminal with SPP(Serial Port Profile). The service startup process is as follows:
# '''Pairing:''' Selects and pairs with a Bluetooth printer.
# Open Bluetooth if doesn't open.
# '''Connecting:''' Establishes a connection using the Serial Port Profile (SPP).
# Scan and discovery the Bluetooth devices surrounding.
# '''Data Transmission:''' Sends data in the form of ESC commands.
# Select and pair the Bluetooth printer.
# '''Printing:''' Executes the print command for the transmitted data.
# Send data(a series of ESC command).
== Prerequisites for Use: ==
# Print the data.
:* Android SDK 24
 
:* Android Build Tools v27.0.0
== Pre-requisites ==
:* Android Support Repository
# Android SDK 24
:* ZXing (for barcode processing)
# Android Build Tools v27.0.0
== Getting Started with Development: ==
# Android Support Repository
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.
# ZXing
 
== Getting started ==
This service is built using gradle. To build this project, use the "gradle build" command or "Import Project" in Android studio.
 
== Code snippet ==
== Code snippet ==
* Basic API of Bluetooth
* Basic API of Bluetooth

Revision as of 00:39, 22 December 2023

Initial Setup:

Not all terminals come with the Bluetooth printer service pre-installed. Before proceeding, ensure you download and install the Bluetooth printer service APK.

Service Overview:

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:

  1. Turning on Bluetooth: Automatically activates Bluetooth if it's not already on.
  2. Scanning for Devices: Discovers nearby Bluetooth devices.
  3. Pairing: Selects and pairs with a Bluetooth printer.
  4. Connecting: Establishes a connection using the Serial Port Profile (SPP).
  5. Data Transmission: Sends data in the form of ESC commands.
  6. 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);
	}
}
  • Send and Print
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) {
	}
}

Download Bluetooth demo

Bluetooth Printer Demo