uni-app notifyBLECharacteristicValueChange方法报错10008?

uni-app notifyBLECharacteristicValueChange方法报错10008?

开发环境 版本号 项目创建方式
Mac 12.1 (21C52) HBuilderX

操作步骤:

  • 连接蓝牙设备,监听特征值的notify,打印结果

预期结果:

  • 接口正常返回

实际结果:

  • 接口报错

bug描述:

尝试调用notifyBLECharacteristicValueChange,接口报错,打印如下

notifyBLECharacteristicValueChange fail {"errno": 1500104, "errCode": 10008, "errMsg": "notifyBLECharacteristicValueChange:fail:no descriptor"}

更多关于uni-app notifyBLECharacteristicValueChange方法报错10008?的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于uni-app notifyBLECharacteristicValueChange方法报错10008?的实战教程也可以访问 https://www.itying.com/category-93-b0.html


在 uni-app 中使用 notifyBLECharacteristicValueChange 方法时,如果返回错误码 10008,通常表示该操作未找到对应的特征值(Characteristic)。这个错误码是微信小程序或 uni-app 提供的 BLE(蓝牙低功耗)API 的常见错误码之一。

可能的原因及解决方法:

  1. 未正确发现特征值

    • 在调用 notifyBLECharacteristicValueChange 之前,必须先通过 getBLEDeviceCharacteristics 方法获取设备的特征值列表,并确认特征值是否存在。
    • 确保 characteristicId 参数与从 getBLEDeviceCharacteristics 返回的特征值 UUID 完全匹配。
  2. 特征值不支持通知

    • 某些特征值可能不支持通知(Notify)或指示(Indicate)。在 getBLEDeviceCharacteristics 返回的特征值对象中,检查 properties 字段,确保其包含 notifyindicate 属性。
  3. 设备未连接或连接已断开

    • 确保蓝牙设备已经成功连接,并且在调用 notifyBLECharacteristicValueChange 时连接仍然有效。可以通过监听 onBLEConnectionStateChange 事件来监控连接状态。
  4. 重复调用

    • 如果已经成功开启了通知,再次调用 notifyBLECharacteristicValueChange 可能会导致错误。确保在每次调用前检查是否已经开启了通知。
  5. 平台限制

    • 不同平台(如 iOS 和 Android)对 BLE 的支持可能略有不同。确保你的代码在不同平台上都经过了充分测试。

示例代码:

uni.getBLEDeviceCharacteristics({
  deviceId: deviceId,
  serviceId: serviceId,
  success: (res) => {
    const characteristics = res.characteristics;
    const targetCharacteristic = characteristics.find(c => c.uuid === characteristicId);
    if (targetCharacteristic && targetCharacteristic.properties.notify) {
      uni.notifyBLECharacteristicValueChange({
        deviceId: deviceId,
        serviceId: serviceId,
        characteristicId: characteristicId,
        state: true,
        success: () => {
          console.log('通知开启成功');
        },
        fail: (err) => {
          console.error('通知开启失败', err);
        }
      });
    } else {
      console.error('特征值不支持通知');
    }
  },
  fail: (err) => {
    console.error('获取特征值失败', err);
  }
});
回到顶部