uniapp中如何使用uni.offBLECharacteristicValueChange这个API
在uniapp中调用uni.offBLECharacteristicValueChange时,总是无法成功取消监听蓝牙特征值变化事件。我已经按照文档写了以下代码:
uni.offBLECharacteristicValueChange({
  deviceId: 'xxx',
  serviceId: 'xxx',
  characteristicId: 'xxx',
  success() {
    console.log('取消监听成功');
  },
  fail(err) {
    console.log('取消监听失败', err);
  }
});
但fail回调总是被触发,错误信息显示"取消监听失败"。请问正确的使用方法是什么?是否需要先调用onBLECharacteristicValueChange才能取消监听?还是说参数传递方式有问题?
        
          2 回复
        
      
      
        在uni-app中,使用uni.offBLECharacteristicValueChange来取消监听低功耗蓝牙特征值变化。示例代码:
uni.offBLECharacteristicValueChange({
  success: () => {
    console.log('取消监听成功')
  }
})
调用后,设备特征值变化将不再触发回调。
在uni-app中,uni.offBLECharacteristicValueChange 用于取消监听低功耗蓝牙(BLE)设备特征值变化的事件。当不再需要接收某个特征的数值变化通知时,应调用此API以避免不必要的资源占用或错误处理。
使用步骤:
- 开启特征值监听:首先使用 uni.notifyBLECharacteristicValueChange启用特征值变化通知。
- 监听事件:通过 uni.onBLECharacteristicValueChange监听特征值变化。
- 取消监听:在适当时候(如页面卸载、断开连接时)调用 uni.offBLECharacteristicValueChange。
代码示例:
// 在页面或组件中
let characteristicId = null; // 存储特征ID
// 启用特征值通知并开始监听
uni.notifyBLECharacteristicValueChange({
  deviceId: '设备ID',
  serviceId: '服务UUID',
  characteristicId: '特征UUID',
  state: true,
  success: () => {
    // 监听特征值变化
    uni.onBLECharacteristicValueChange((res) => {
      console.log('特征值变化:', res.value);
    });
    characteristicId = '特征UUID'; // 记录特征ID
  }
});
// 取消监听(例如在页面onUnload或断开连接时)
function stopListening() {
  if (characteristicId) {
    uni.offBLECharacteristicValueChange(characteristicId);
    characteristicId = null;
    console.log('已取消特征值变化监听');
  }
}
注意事项:
- 参数:offBLECharacteristicValueChange需传入之前监听的特征ID(characteristicId)。
- 调用时机:确保在页面销毁或蓝牙断开前调用,避免内存泄漏。
- 兼容性:检查基础库版本支持(通常uni-app已处理,但需真机测试)。
通过以上步骤,可以正确管理BLE特征值监听的启用与关闭。
 
        
       
                     
                   
                    

