需求背景
蓝牙设备一直在给微信小程序发送数据,例如一秒一次。 但是切到后台之后,再切回来,例如,间隔了5分钟,再切回来会收到大量的蓝牙数据。 看起来是微信帮小程序做了缓存队列,然后疯狂地传给小程序。
造成的影响就是,用户会看到界面在一顿疯狂地刷新,异常鬼畜。 我比较担心的是,如果时间更长,会不会导致用户切回来的时候,会在很长一段时间内无法操作。
解决思路
小程序切到后台时,需要取消监听。等切回来时,再重新监听。 因为在后台这期间收到的数据并没有处理的意义,只需要在再次打开时, 同步一下状态即可。
搜索了半天没有找到相关的文档。迫不得已浏览一遍小程序蓝牙文档,看看是否有相关接口。 没想到在车间里翻看小程序文档的 BLE 相关接口时,最终发现了这个接口。
参考文档
https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.offBLECharacteristicValueChange.html
功能描述: 取消监听蓝牙低功耗设备的特征值变化事件。
wx.offBLECharacteristicValueChange(function callback)
其对应的监听操作是:
wx.onBLECharacteristicValueChange((characteristic) => {})
取消监听的实现
onHide: function() {
if (wx.offBLECharacteristicValueChange) {
console.log("wx.offBLECharacteristicValueChange exists.");
wx.offBLECharacteristicValueChange((res) => {
console.log("disabled listening: offBLECharacteristicValueChange");
console.log(res);
})
} else {
console.log("wx.offBLECharacteristicValueChange does not exist.");
}
},
测试了一下,确实好用。体验好太多了。
需要注意的是,回调里的内容永远不会被触发。Android 上测试的。 即便去掉了 res 参数,也没有回调成功。
微信关注我哦 👍
我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式