我有一个带有几个按钮的蓝牙LE操纵杆。我想直接将其连接到应用,而不使用蓝牙设置,而是通过BluetoothLeScanner
连接到它。
我已经可以连接到心率监测器并定期收到HR值的通知。
我还创建了一个带有ESP32的温度/光/湿度传感器,我也可以在应用程序中连接并显示传感器值。
我对这个HID设备的理解可能是错误的。在App BLE扫描仪的帮助下,我可以通过BLE连接到这个小工具并查看所提供的服务。
其中一个是0x1812 HUMAN INTERFACE DEVICE
,其中包含REPORT
类型的几个特征,其中包括HID OVER GATT PROFILE SPECIFICATION
(HOGP_SPEC
)
如何找出按下哪个按钮,操纵杆移动到哪个位置?我想这必须通过我必须订阅的通知发生。
是否有任何Android库可以处理HID输入设备?我不想做的是使用蓝牙设置并连接到设备并将其检测为HID设备并用一些奇怪的映射替换键盘。我根本不想让操作系统参与其中,就像我连接并使用HRM和ESP32一样。
我无法找到相关信息。
我可以使用我的应用程序连接到设备,枚举服务和特征。但从那以后,我不知道如何使用HID。理想情况下,我会收到类似"按钮A被按下的通知" "操纵杆移动到x = 32"例如,x的范围是-127到127.
答案 0 :(得分:1)
从Android 5.0开始,访问HID特性需要具有BLUETOOTH_PRIVILEGED权限。应用程序获得该权限的唯一方法是使用与系统应用程序相同的证书进行签名。
这是一项安全功能,可防止应用程序从键盘接收HID事件并窃取密码。
4.6受保护的服务
Android不允许读取或写入具有以下特征(及其描述符)的数据:
- HID服务(自Android 5起):
a. HID Information b. Report Map c. HID Control Point d. Report
- FIDO(https://fidoalliance.org/)(自Android 6起)
a. U2F (0000FFFD-0000-1000-8000-00805F9B34FB)
仅具有BLUETOOTH_PRIVILEGED的应用程序,即已签名的应用程序 具有与系统相同的证书,能够读写 数据具有这些特征。