我也排查了一两天,最后一个不经意的测试,让我发现问题所在。我用网上找的蓝牙助手去发命令,HBulider调试器竟然收到广播信息了,那说明我接收本身写的没有问题。 之前我也加了type:'notification',还有plus.bluetooth.onBLECharacteristicValueChange这种写法,其实这些都可以不用加,只要正常的写法writeType: 'writeNoResponse' 即可了 问题就在于写命令出错了,虽然返回写成功了。贴上我调试的代码吧 // 写命令+接收广播消息 var bufferstr = this.string2buffer(this.writeCmd); uni.writeBLECharacteristicValue({ deviceId, serviceId, characteristicId, value: bufferstr, writeType: 'writeNoResponse', success: res => { console.log('writeBLECharacteristicValue:success:' + JSON.stringify(res)); setTimeout(() => { uni.onBLECharacteristicValueChange(res => { let buffer = res.value; let dataView = new DataView(buffer); let dataResult = []; for (let i = 0; i < dataView.byteLength; i++) { dataResult.push(dataView.getUint8(i).toString(16)); } const result = dataResult; console.log('onBLECharacteristicValueChange:success:OK:', result); }); }, 500); }, fail: err => { console.log('writeBLECharacteristicValue:error:' + JSON.stringify(err)); } }); string2buffer: function(str) { // 首先将字符串转为16进制 let val = str; // 将16进制转化为ArrayBuffer return new Uint8Array( val.match(/[\da-f]{2}/gi).map(function(h) { return parseInt(h, 16); })).buffer; }
安卓手机上onBLECharacteristicValueChange不能触发- 当前 Bug 的表现(可附上截图) 在Android手机上,成功调用wx.notifyBLECharacteristicValueChange后,调用wx.writeBLECharacteristicValue不能触发wx.onBLECharacteristicValueChange设置的回调函数,但在iOS手机上能够触发回调函数。 - 预期表现 回调函数被触发 - 复现路径 调试环境:小米6 Pro,Android 8.1.0,微信6.7.3 第一步,定义回调方法: const onBleCharRead = res => { ... } 第二步,调用wx.onBLECharacteristicValueChange(onBleCharRead)设置回调监听 第三步,调用wx.notifyBLECharacteristicValueChange方法启用指定characteristic的notify功能(提示成功) 第四步,调用wx.readBLECharacteristicValue方法读取另外一个characteristic的数据(此时onBleCharRead回调被触发) 第五步,调用wx.writeBLECharacteristicValue方法向指定的characteristic些数据(数据长度20字节) 进行第五步时onBleCharRead一直不会被触发,尝试过在write之前延迟一段时间(最长1s),但仍然不能解决问题。 相关日志如下: [图片]
2022-12-17