基于GATT的Android极简蓝牙键盘按键无响应,咨询GATT配置问题
问题分析与解决建议
从你提供的GATT日志和代码来看,存在一个明显的GATT配置错误,同时还有几个需要验证的关键项:
1. Report Reference Descriptor(00002907)配置错误
日志中onDescriptorReadRequest: 00002907-...返回的数据是2a 4d,完全不符合该描述符的规范:
- Report Reference Descriptor(UUID 00002907)由两个字节组成:
- 第1字节:Report ID(若HID报告未使用ID,填
0x00即可) - 第2字节:Report Type,合法值仅为
0x01(输入报告,对应键盘按键事件)、0x02(输出报告)、0x03(特征报告)
- 第1字节:Report ID(若HID报告未使用ID,填
- 当前返回的
0x4d不是合法的Report Type,会导致Windows无法识别该特征对应的HID报告类型,自然无法处理你发送的按键数据。 - 正确配置应为返回
0x00 0x01(无Report ID的输入报告)。
2. 其他需要验证的点
(1)确认特征与服务UUID正确性
- 代码中
BtConstants.REPORT_CHARACTERISTIC必须对应HID Report特征的标准UUID:00002a4d-0000-1000-8000-00805f9b34fb,UUID错误会导致数据发送到无关特征,无法被识别。 - HID服务的标准UUID是
00001812-0000-1000-8000-00805f9b34fb,请确认HID_SERVICE取值正确。
(2)Report特征的属性配置
HID Report特征必须包含PROPERTY_NOTIFY属性,同时建议配置PERMISSION_READ和PERMISSION_WRITE权限,确保系统能正常交互。
(3)完善按键发送流程
HID键盘的按键事件需要成对发送:
- 先发送按键按下报告:
{0x00, 0x0B}(对应H键) - 延迟100ms左右,发送空报告:
{0x00, 0x00}释放按键
仅发送按下报告不发送释放报告,部分系统可能不会触发按键响应。
内容的提问来源于stack exchange,提问作者stud0709
相关产品推荐
相关产品推荐

