Android:直接在应用程序中使用HID over GATT(Gadget = HID→控制应用程序)

时间:2017-11-10 13:43:41

标签: android bluetooth bluetooth-lowenergy hid

我有一个带有几个按钮的蓝牙LE操纵杆。我想直接将其连接到应用,而不使用蓝牙设置,而是通过BluetoothLeScanner连接到它。

我已经可以连接到心率监测器并定期收到HR值的通知。

我还创建了一个带有ESP32的温度/光/湿度传感器,我也可以在应用程序中连接并显示传感器值。

我对这个HID设备的理解可能是错误的。在App BLE扫描仪的帮助下,我可以通过BLE连接到这个小工具并查看所提供的服务。

其中一个是0x1812 HUMAN INTERFACE DEVICE,其中包含REPORT类型的几个特征,其中包括HID OVER GATT PROFILE SPECIFICATIONHOGP_SPEC

如何找出按下哪个按钮,操纵杆移动到哪个位置?我想这必须通过我必须订阅的通知发生。

是否有任何Android库可以处理HID输入设备?我不想做的是使用蓝牙设置并连接到设备并将其检测为HID设备并用一些奇怪的映射替换键盘。我根本不想让操作系统参与其中,就像我连接并使用HRM和ESP32一样。

我无法找到相关信息。

我可以使用我的应用程序连接到设备,枚举服务和特征。但从那以后,我不知道如何使用HID。理想情况下,我会收到类似"按钮A被按下的通知" "操纵杆移动到x = 32"例如,x的范围是-127到127.

1 个答案:

答案 0 :(得分:1)

从Android 5.0开始,访问HID特性需要具有BLUETOOTH_PRIVILEGED权限。应用程序获得该权限的唯一方法是使用与系统应用程序相同的证书进行签名。

这是一项安全功能,可防止应用程序从键盘接收HID事件并窃取密码。

引用https://devzone.nordicsemi.com/cfs-file/__key/communityserver-discussions-components-files/4/BLE_5F00_on_5F00_Android_5F00_v1.0.1.pdf

4.6受保护的服务

Android不允许读取或写入具有以下特征(及其描述符)的数据:

  1. HID服务(自Android 5起):
a.  HID Information
b.  Report Map
c.  HID Control Point
d.  Report
  1. FIDO(https://fidoalliance.org/)(自Android 6起)
a.  U2F (0000FFFD-0000-1000-8000-00805F9B34FB)

仅具有BLUETOOTH_PRIVILEGED的应用程序,即已签名的应用程序 具有与系统相同的证书,能够读写 数据具有这些特征。