Android重连绑定HID BLE外设时未重新启用Report特征通知问题
关于Android重连绑定HID BLE外设后Report通知不启用的问题解答
问题1:这是Android的Bug,还是外设需在重连后记住订阅状态?
这不是Android的Bug,而是符合BLE核心规范与HID over BLE规范的设计要求——外设必须在绑定流程中持久化保存Report特征的CCCD(客户端特征配置描述符)订阅状态。
Android在首次绑定完成后,会默认认为外设已记住当前的订阅配置,因此重连已绑定设备时不会重复发送CCCD写入请求。外设需要自行负责在重连成功后,将之前保存的CCCD状态恢复到对应的Report特征上,自动启用通知。
问题2:应如何处理该问题?是否无需等待CCCD写入即可直接发送Report?
处理方案
- 外设端实现CCCD状态持久化:在绑定成功后,将Report特征的CCCD值(
0x0001表示启用通知,0x0002表示启用指示,0x0000表示禁用)保存到非易失性存储(如Flash)中。当检测到已绑定设备重连完成后,自动将该CCCD值恢复到对应特征,主动启用通知功能。 - 不能跳过CCCD写入直接发送Report:HID over BLE的Report传输依赖CCCD的配置状态,即使外设强行发送Report数据包,Android端BLE栈因未订阅该特征通知,会直接丢弃数据包,无法传递到应用层。必须确保CCCD处于启用状态后再发送Report。
内容的提问来源于stack exchange,提问作者Daniel D.
相关产品推荐
相关产品推荐

