原创文章,转载请写明转载地址:https://blog.youkuaiyun.com/michelsn/article/details/88232476
开发环境:HBuilderX + uni-app
蓝牙打印机:驰腾PD36 和 GPrinter佳博GP-Q80
Andorid环境下打印没什么问题,主要描述下IOS环境下的情况
-----------------------------------------------------------------------------------
问题描述:先搜索蓝牙设备,并把搜索到的蓝牙设备记录下来,然后关闭重启APP,选择之前搜索到的蓝牙设备DeviceID,点击连接并打印,结果会出现 no device 错误;
解决方案:每一次执行uni.openBluetoothAdapter后,都需要去执行uni.startBluetoothDevicesDiscovery,搜索到之前记录的蓝牙设备,然后再根据DeviceID去连接蓝牙设备即可。
-----------------------------------------------------------------------------------
以下贴出这几天研究APP对接蓝牙打印的代码,希望可以帮助有需要的朋友,少经历点坑。
sendDataToBLE: function(deviceId, serviceId, characteristicId, msg, callbackIfFinish) {
function encode_utf8(s) {
return unescape(encodeURIComponent(s));
}
function str2ab(str) {
var s = encode_utf8(str);
var buf = new ArrayBuffer(s.length);
var bufView = new Uint8Array(buf);
for (var i = 0, strLen = s.length; i < strLen; i++) {
bufView[i] = s.charCodeAt(i);
}
return bufView;
}
function split_array(arr, len) {
var a_len = arr.length;
var result = []
for (var i = 0; i < a_len; i += len) {
result.push(arr.slice(i, i + len))
}
return result;
}
//var uint8Buf = str2ab(msg);
var uint8Array = new textencoding.TextEncoder("gb2312", {
NONSTANDARD_allowLegacyEncoding: true
}).encode(msg);
var uint8Buf = Array.from(uint8Array);
//拆分数组 每20个元素组成一个新数组
var sendloop = split_array(uint8Buf, 20);
function realWriteData(sendloop, i) {
if (i >= sendloop.length) {
if (callbackIfFinish) {
callbackIfFinish(1, "");
}
return;