How to Use the Terminal's Bluetooth Printer Service: Difference between revisions
No edit summary |
No edit summary |
||
Line 3: | Line 3: | ||
== Introduction == | == Introduction == | ||
Bluetooth printing is a service | Bluetooth printing is a service, which gets a connection with buletooth printer, sends data to the bluetooth printer through the connection and then printing the data. The connection is built by terminal with SPP(Serial Port Profile). | ||
The process of the service: | The process of the service: | ||
# | # Open bluetooth if doesn't open. | ||
# | # Scan and discovery the bluetooth devices surrounding. | ||
# | # Select and pair the bluetooth printer. | ||
# | # Send data(a series of ESC command). | ||
# | # Print the data. | ||
== Pre-requisites: == | == Pre-requisites: == | ||
Line 15: | Line 15: | ||
# Android Build Tools v27.0.0 | # Android Build Tools v27.0.0 | ||
# Android Support Repository | # Android Support Repository | ||
# | # Zxing | ||
== Getting Started: == | == Getting Started: == | ||
This service uses the Gradle build system. To build this project, use the "gradlew build" command or use "Import Project" in Android Studio. | This service uses the Gradle build system. To build this project, use the "gradlew build" command or use "Import Project" in Android Studio. | ||
== | == Code Snippet == | ||
* Basic PAIs of Bluetooth | |||
<syntaxhighlight lang="java" line='line'> | <syntaxhighlight lang="java" line='line'> | ||
public void openBluetooth(Activity activity) { | public void openBluetooth(Activity activity) { | ||
Line 77: | Line 77: | ||
}; | }; | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Connection with SPP | * Connection with SPP | ||
<syntaxhighlight lang="java" line='line'> | <syntaxhighlight lang="java" line='line'> | ||
public boolean connect() { | public boolean connect() { | ||
Line 112: | Line 112: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Send and print | * Send and print | ||
<syntaxhighlight lang="java" line='line'> | <syntaxhighlight lang="java" line='line'> | ||
final byte[][] byteCommands = { { 0x1b, 0x40 }, //printer commands(ESC commands) | final byte[][] byteCommands = { { 0x1b, 0x40 }, //printer commands(ESC commands) |
Revision as of 06:12, 19 November 2018
This service demonstrates how to use a set of Bluetooth APIs to print image or text. The integrity process of Bluetooth print service includes opening Bluetooth, scanning the Bluetooth devices surrounding, pairing with a Bluetooth device and connecting with the device with SPP, and then sending data, which always shows in types of image and text document, and printing the data.
Introduction
Bluetooth printing is a service, which gets a connection with buletooth printer, sends data to the bluetooth printer through the connection and then printing the data. The connection is built by terminal with SPP(Serial Port Profile). The process of the service:
- Open bluetooth if doesn't open.
- Scan and discovery the bluetooth devices surrounding.
- Select and pair the bluetooth printer.
- Send data(a series of ESC command).
- Print the data.
Pre-requisites:
- Android SDK 24
- Android Build Tools v27.0.0
- Android Support Repository
- Zxing
Getting Started:
This service uses the Gradle build system. To build this project, use the "gradlew build" command or use "Import Project" in Android Studio.
Code Snippet
- Basic PAIs 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) {
}
}