- 小程序BLE多次连接同一设备可能失败
根据https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.createBLEConnection.html的官方描述: 请保证尽量成对的调用 [代码]createBLEConnection[代码] 和 [代码]closeBLEConnection[代码] 接口。安卓如果多次调用 [代码]createBLEConnection[代码] 创建连接,有可能导致系统持有同一设备多个连接的实例,导致调用 [代码]closeBLEConnection[代码] 的时候并不能真正的断开与设备的连接。 目前的bug场景是:用户在BLE交互进行到一半时,断开了BLE连接进入了设备的扫描页面。然后重新连接该设备,有一定概率会建立BLE连接错误: {"errCode":10003,"errMsg":"createBLEConnection:fail:connection fail status:133"} 并且我已确认createBLEConnection和closeBLEConnection是成对调用的。 手机型号:华为P20. 希望小程序官方可以给开发者更大的容错性。
2019-05-28 - 低功耗蓝牙wx.getBLEDeviceServices接口问题
- 当前 Bug 的表现(可附上截图) 使用wx.createBLEConnection连接BLE设备后,接着使用wx.getBLEDeviceServices获取服务UUID,获取服务UUID有时候会报错,errCode为:10004(no service),重新调用wx.getBLEDeviceServices接口还是报同样的错误,如果去调用wx.createBLEConnection重新连接设备,会报错,errCode为:-1(already connected) - 预期表现 wx.createBLEConnection连接设备后,wx.getBLEDeviceServices获取服务UUID应该成功 - 复现路径 - 提供一个最简复现 Demo createBLEConnection: function (deviceId){ wx.createBLEConnection({ deviceId: deviceId, success: (res) => { console.log("createBLEConnection success: ", res) this.getBLEDeviceServices(deviceId) }, fail: (res) => { console.error("createBLEConnection fail: ", res) if (res.errCode == -1){ this.getBLEDeviceServices(deviceId) } else { wx.showModal({ title: '提示', content: '连接失败,请稍后重试!', showCancel: false }) } } }) } getBLEDeviceServices: function (deviceId) { wx.getBLEDeviceServices({ deviceId, success: (res) => { for (let i = 0; i < res.services.length; i++) { if (res.services[i].isPrimary) { let serviceId = res.services[i].uuid wx.getBLEDeviceCharacteristics({ deviceId, serviceId, success: (res) => { console.log('getBLEDeviceCharacteristics success: ', res.characteristics) }, fail: (res) => { console.error('getBLEDeviceCharacteristics failed: ', res) } }) return } } }, fail: (res) => { console.error("getBLEDeviceServices failed: ", res) if (res.errCode == 10004){ wx.showLoading({ title: '设备连接出错,自动重连中', }) setTimeout(() => { let _deviceId = deviceId this.createBLEConnection(_deviceId) //this.getBLEDeviceServices(_deviceId) }, 1000) } } }) }
2019-03-07