微信小程序切换到后台时,取消蓝牙监听

更新日期: 2022-06-17 阅读次数: 178 字数: 441 分类: 微信小程序

需求背景

蓝牙设备一直在给微信小程序发送数据,例如一秒一次。 但是切到后台之后,再切回来,例如,间隔了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 参数,也没有回调成功。

tags: 小程序蓝牙

爱评论不评论