安卓环境连接某些蓝牙设备在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

1 回复

更多关于安卓环境连接某些蓝牙设备在uni-app中onBLECharacteristicValueChange无回调的实战教程也可以访问 https://www.itying.com/category-93-b0.html


这是一个典型的蓝牙特征值通知配置问题。在Android平台上,蓝牙特征值的通知机制需要正确设置描述符才能正常工作。

你分析得很准确,问题确实在于特征值描述符的配置。在Android系统中,启用特征值通知需要修改CCCD(Client Characteristic Configuration Descriptor)描述符的值。

关于你提到的解决方案:

  1. 对于微信小程序环境,type: 'notification'参数确实可以解决这个问题,因为微信小程序底层做了兼容处理。

  2. 在uni-app App环境下,目前确实存在这个限制。uni-app在App端调用的是原生蓝牙API,但可能没有完全实现微信小程序的这种兼容性配置。

建议的替代方案:

// 在uni-app App环境下,可以尝试直接操作描述符
uni.writeBLECharacteristicValue({
    deviceId,
    serviceId,
    characteristicId: descriptorId, // 需要找到对应的CCCD描述符ID
    value: new ArrayBuffer(2) // 通常设置为0x0001启用通知
})
回到顶部