1.碰到的第一个问题,小米真机onBluetoothDeviceFound没有回调,华为mate30和ios手机都有回调。
发现这个是Android手机微信app定位权限的问题,进入手机设置打开微信定位权限就好了,但是uni.authorize方法并不能让微信去触发小米系统的定位权限弹窗(如下图) ,只能再搜索不到设备的时候提示用户去打开小米系统的权限设置了。
一般用户的微信都是有定位的权限的,那部小米手机是测试机是第一次安装的微信,所以会出现这个问题。
2.调用notifyBLECharacteristicValueChange 一直报错:fail:no descriptor,不管是ios还是android都出现了这个问题。
去微信开发社区搜索notifyBLECharacteristicValueChange:fail:no descriptor,搜到了一大堆,但是没有一个解决方案,后来查看微信官方的ble示例代码(如下图),
发现notifyBLECharacteristicValueChange并没有写success、fail或者complete的回调
if (item.properties.notify || item.properties.indicate) {
wx.notifyBLECharacteristicValueChange({
deviceId,
serviceId,
characteristicId: item.uuid,
state: true,
})
}
复制代码
然后发现notifyBLECharacteristicValueChange 即使报no descriptor错误,也可以收到onBLECharacteristicValueChange 的回调,最后我的代码是这样的
uni.notifyBLECharacteristicValueChange({
state: true,
deviceId: that.deviceId,
serviceId: server_uuid,
characteristicId: characteristicId,
success(res) {
console.log("notify成功");
console.log(res);
},
fail(err) {
console.log("notify失败");
console.log(err);
}
})
//监听设备发送过来的数据
uni.onBLECharacteristicValueChange(function(res) {
console.log('收到设备发送过来的数据');
console.log(res);
let buf = Buffer.from(res.value);
console.log(buf.toString());
})
//发送数据给设备
that.sendCongifComm(characteristicId)
复制代码
这微信小程序真的是坑,也就是说只要调用了notifyBLECharacteristicValueChange方法,不管返回成功还是失败,都可以监听到onBLECharacteristicValueChange事件了么?
3 Android真机getBLEDeviceCharacteristics获取特征成功,同样代码ios真机获取getBLEDeviceCharacteristics失败 报错10004
用微信官方的ble示例代码ios真机可以,结果发现是uuid的问题,service的uuid是设备写死给过来的,是小写的,然后就直接copy过来了,后来把uuid全部改为大写的就可以了。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END