安卓环境连接某些蓝牙设备在uni-app中onBLECharacteristicValueChange无回调
安卓环境连接某些蓝牙设备在uni-app中onBLECharacteristicValueChange无回调
| 开发环境 | 版本号 | 项目创建方式 |
|---|---|---|
| Windows | 11 | HBuilderX |
操作步骤:
安卓环境连接某些蓝牙设备,notifyBLECharacteristicValueChange后查看notifyBLECharacteristicValueChange 回调数据
预期结果:
uni.notifyBLECharacteristicValueChange 有回调数据
实际结果:
uni.notifyBLECharacteristicValueChange 无回调数据
bug描述:
安卓环境连接某些蓝牙设备onBLECharacteristicValueChange无回调
原因分析:
1、未能正确修改特征值下的描述符的值
解决方案:
1、安卓微信小程序环境增加type: 'notification’可解决,见下方代码
2、安卓App环境下无效,应该是uniapp在app环境下未支持type: 'notification’的配置 !!!
uni.notifyBLECharacteristicValueChange({
state: true, // 启用 notify 功能
type: 'notification', //兼容安卓小程序(安卓app下仍就异常),不加的话onBLECharacteristicValueChange无回调
deviceId,
serviceId,
characteristicId
})
更多关于安卓环境连接某些蓝牙设备在uni-app中onBLECharacteristicValueChange无回调的实战教程也可以访问 https://www.itying.com/category-93-b0.html
更多关于安卓环境连接某些蓝牙设备在uni-app中onBLECharacteristicValueChange无回调的实战教程也可以访问 https://www.itying.com/category-93-b0.html
这是一个典型的蓝牙特征值通知配置问题。在Android平台上,蓝牙特征值的通知机制需要正确设置描述符才能正常工作。
你分析得很准确,问题确实在于特征值描述符的配置。在Android系统中,启用特征值通知需要修改CCCD(Client Characteristic Configuration Descriptor)描述符的值。
关于你提到的解决方案:
-
对于微信小程序环境,
type: 'notification'参数确实可以解决这个问题,因为微信小程序底层做了兼容处理。 -
在uni-app App环境下,目前确实存在这个限制。uni-app在App端调用的是原生蓝牙API,但可能没有完全实现微信小程序的这种兼容性配置。
建议的替代方案:
// 在uni-app App环境下,可以尝试直接操作描述符
uni.writeBLECharacteristicValue({
deviceId,
serviceId,
characteristicId: descriptorId, // 需要找到对应的CCCD描述符ID
value: new ArrayBuffer(2) // 通常设置为0x0001启用通知
})

