uniApp连接传统蓝牙的斑马打印机打印
1、1. 页面初始化,获取位置,打开蓝牙连接(必须打开定位)
let system = uni.getSystemInfoSync(); // 获取系统信息
if (system.platform === 'android') { // 判断平台
var that = this
var context = plus.android.importClass("android.content.Context");
var locationManager = plus.android.importClass("android.location.LocationManager");
var main = plus.android.runtimeMainActivity();
var mainSvr = main.getSystemService(context.LOCATION_SERVICE);
// 定位检测
if (!mainSvr.isProviderEnabled(locationManager.GPS_PROVIDER)) {
uni.showModal({
title: '提示',
content: '请打开定位服务功能',
showCancel: false, // 不显示取消按钮
success() {
if (!mainSvr.isProviderEnabled(locationManager.GPS_PROVIDER)) {
var Intent = plus.android.importClass('android.content.Intent');
var Settings = plus.android.importClass('android.provider.Settings');
var intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
main.startActivity(intent); // 打开系统设置GPS服务页面
} else {
console.log('GPS功能已开启');
}
}
});
return false
} else {
console.log('GPS功能已开启');
that.searchDevices()
return true
}
}
2、2. 搜索蓝牙
//注册类
var that = this
that.list1 = [] //未配对
that.list2 = [] // 已配对
that.main = plus.android.runtimeMainActivity();
var IntentFilter = plus.android.importClass('android.content.IntentFilter');
var BluetoothAdapter = plus.android.importClass("android.bluetooth.BluetoothAdapter");
var BluetoothDevice = plus.android.importClass("android.bluetooth.BluetoothDevice");
var BAdapter = BluetoothAdapter.getDefaultAdapter();
uni.showLoading({
title: '开始搜索设备'
})
var filter = new IntentFilter();
var bdevice = new BluetoothDevice();
BAdapter.startDiscovery(); //开启搜索
var receiver;
receiver = plus.android.implements('io.dcloud.android.content.BroadcastReceiver', {onReceive: function(context, intent) { //实现onReceiver回调函数
plus.android.importClass(intent); //通过intent实例引入intent类,方便以后的‘.’操作
if (intent.getAction() == "android.bluetooth.adapter.action.DISCOVERY_FINISHED") {
that.main.unregisterReceiver(receiver); //取消监听
console.log("搜索结束")
uni.hideLoading()
} else {
if (intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE).getBondState() === 10) {
that.list1.push({
name: intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE).getName(),
address: intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE).getAddress()
})
} else if (intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE).getBondState() === 12) {
that.list2.push({
name: intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE).getName(),
address: intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE).getAddress()
})
}
}
}
});
filter.addAction(bdevice.ACTION_FOUND);
filter.addAction(BAdapter.ACTION_DISCOVERY_STARTED);
filter.addAction(BAdapter.ACTION_DISCOVERY_FINISHED);
filter.addAction(BAdapter.ACTION_STATE_CHANGED);
that.main.registerReceiver(receiver, filter); //注册监听
3、3. 蓝牙连接
// mac_address为获取到蓝牙数据中的address字段
if (!mac_address) {
mui.toast('请选择蓝牙打印机');
return;
}
this.main = plus.android.runtimeMainActivity();
BluetoothAdapter = plus.android.importClass("android.bluetooth.BluetoothAdapter");
var UUID = plus.android.importClass("java.util.UUID");
uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
BAdapter = BluetoothAdapter.getDefaultAdapter();
device = BAdapter.getRemoteDevice(mac_address);
plus.android.importClass(device);
this.bluetoothSocket = device.createInsecureRfcommSocketToServiceRecord(uuid);
plus.android.importClass(this.bluetoothSocket);
if (!this.bluetoothSocket.isConnected()) {
uni.showLoading({
title: '检测到设备未连接,尝试连接....'
})
this.bluetoothSocket.connect();
}
uni.hideLoading()
console.log('设备已连接')
4、4. 打印
if (this.bluetoothSocket.isConnected()) {
uni.showLoading({
title: '打印中,请稍后!'
})
var outputStream = this.bluetoothSocket.getOutputStream();
plus.android.importClass(outputStream);
var string = "! 0 200 200 418 1\r\n" +
"LABEL\r\n" +
"PW 575\r\n" +
"TONE 0\r\n" +
"SPEED 2\r\n" +
"ON-FEED IGNORE\r\n" +
"NO-PACE\r\n" +
"BAR-SENSE\r\n" +
"B QR 130 5 M 2 U 5\r\n" +
"MA,e9b98ae6a1a5e4bb99c2b7e7baa4e4ba91e5bc84e5b7a7e5ae8be7a7a6e8a782e7baa4e4ba91e5bc84e5b7a7efbc8ce9a39ee6989fe4bca0e681a8efbc8ce993b6e6b189e8bfa2e8bfa2e69a97e5baa6e38082e98791e9a38ee78e89e99cb2e4b880e79bb8e980a2efbc8ce4bebfe8839ce58db4e4babae997b4e697a0e695b0e38082e69f94e68385e4bcbce6b0b4efbc8ce4bdb3e69c9fe5a682e6a2a6efbc8ce5bf8de9a1bee9b98ae6a1a5e5bd92e8b7afe38082e4b8a4e68385e88ba5e698afe4b985e995bfe697b6efbc8ce58f88e5b282e59ca8e69c9de69c9de69aaee69aaee38082\r\n" +
"ENDQR\r\n" +
"FORM\r\n" +
"PRINT\r\n"
var bytes = plus.android.invoke(string, 'getBytes', 'gbk');
outputStream.write(bytes);
outputStream.flush();
device = null //这里关键
uni.hideLoading()
// bluetoothSocket.close(); //必须关闭蓝牙连接否则意外断开的话打印错误
}
5、5. 打印结束关闭蓝牙连接
bluetoothSocket.close()