我前面通过 uni.openBluetoothAdapter 初始化蓝牙后,使用uni.onBluetoothDeviceFound监听寻找设备,通过如下操作,成功连接到蓝牙后, 我通过uni.getBLEDeviceServices 怎么都是service为空,延时没有用,我最大给到了10S去获取服务,依旧是报错10004。
特别说明:
我打包成APP,在手机上跑,是一点问题没有的。
但是我打包成APP,放在PAD上跑,就会出现这个问题。
安卓平板,系统7.1.2, 是横屏的,跟超市收银台使用的那种一样,平板收银。
uni.createBLEConnection({
deviceId: deviceId,
complete(res) {
if (res.errMsg == "createBLEConnection:ok") {
succToast("连接蓝牙--成功");
console.log("连接蓝牙-[" + item.name + "]--成功")
currDev = item;
// 一定要延时,不然 getBLEServices 获取不到信息
setTimeout(function() {
getBLEServices(deviceId)
}, 2000)
} else {
errorToast('连接蓝牙失败,请确认打印机蓝牙正常')
console.log(res)
}
//连接成功 关闭搜索
stopFindBule()
},
})
function getBLEServices(_deviceId) {
let deviceId = _deviceId
console.log(_deviceId)
console.log("获取该蓝牙设备所有服务(service)。---------------")
uni.getBLEDeviceServices({
// 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接
deviceId: deviceId,
complete(res) {
console.log('-------uni.getBLEDeviceServices-------')
console.log(res)
if(!res.services||res.services.length.length==0){
errorToast('getBLEDeviceServices 为空')
return false;
}
let serviceId = "";
for (var s = 0; s < res.services.length; s++) {
console.log(res.services[s].uuid)
let serviceId = res.services[s].uuid
uni.getBLEDeviceCharacteristics({
// 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接
deviceId: deviceId,
// 这里的 serviceId 需要在 getBLEDeviceServices 接口中获取
serviceId: serviceId,
success(res) {
var re = JSON.parse(JSON.stringify(res))
console.log('deviceId = [' + deviceId + '] serviceId = [' + serviceId + ']')
for (var c = 0; c < re.characteristics.length; c++) {
if (re.characteristics[c].properties.write == true) {
let uuid = re.characteristics[c].uuid
console.log(' deviceId = [' + deviceId + '] serviceId = [' + serviceId + '] characteristics=[' +
uuid)
// 获取UUID和serviceId
currDev.services = {
serviceId: serviceId,
characteristicId: uuid
};
overToast('连接服务成功');
console.log('currDevcurrDevcurrDevcurrDevcurrDev')
console.log(JSON.stringify(currDev));
}
}
}
})
}
},
fail(res) {
console.log(res)
},
})
}
6***@qq.com (作者)
这个没用,每次进入都是重新扫描得到的 最新的数据,
2020-11-09 17:02
hanxu1997
回复 6***@qq.com: 每次进入哪里?最新的数据指什么?getBluetoothDevices获取到的蓝牙设备列表?这样有啥问题呢,可以描述得具体点吗?
2020-11-10 11:44
6***@qq.com (作者)
回复 hanxu1997: 每次都是通过 uni.createBLEConnection 建立连接成功了的,再去获取的uni.getBLEDeviceServices。 我前面通过 uni.openBluetoothAdapter 初始化蓝牙后,使用uni.onBluetoothDeviceFound监听寻找设备找到设备后,uni.createBLEConnection,成功连接到蓝牙。 后面依旧是getBLEDeviceServices 10004
2020-11-11 11:32
hanxu1997
回复 6***@qq.com: 你有时间可以trytry:判断getBLEDeviceServices报错10004,自动回到getBluetoothDevices这步,在已发现的蓝牙设备列表中重新匹配获取deviceId,然后再createBLEConnection,再getBLEDeviceServices,应该就不会10004
2020-11-12 09:23
6***@qq.com (作者)
回复 hanxu1997: 好 下次遇到这个case 我重点这里试试。
2020-11-16 15:25
3***@qq.com
我用这个解决了Noice监听不到的问题
2023-07-04 15:50