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 的常见错误码之一。
可能的原因及解决方法:
-
未正确发现特征值:
- 在调用
notifyBLECharacteristicValueChange
之前,必须先通过getBLEDeviceCharacteristics
方法获取设备的特征值列表,并确认特征值是否存在。 - 确保
characteristicId
参数与从getBLEDeviceCharacteristics
返回的特征值 UUID 完全匹配。
- 在调用
-
特征值不支持通知:
- 某些特征值可能不支持通知(Notify)或指示(Indicate)。在
getBLEDeviceCharacteristics
返回的特征值对象中,检查properties
字段,确保其包含notify
或indicate
属性。
- 某些特征值可能不支持通知(Notify)或指示(Indicate)。在
-
设备未连接或连接已断开:
- 确保蓝牙设备已经成功连接,并且在调用
notifyBLECharacteristicValueChange
时连接仍然有效。可以通过监听onBLEConnectionStateChange
事件来监控连接状态。
- 确保蓝牙设备已经成功连接,并且在调用
-
重复调用:
- 如果已经成功开启了通知,再次调用
notifyBLECharacteristicValueChange
可能会导致错误。确保在每次调用前检查是否已经开启了通知。
- 如果已经成功开启了通知,再次调用
-
平台限制:
- 不同平台(如 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);
}
});