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

Dan*_*l F 5 android bluetooth hid bluetooth-lowenergy

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

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

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

我对这个 HID 设备的理解可能是错误的。在应用程序 BLE Scanner 的帮助下,我可以通过 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。

小智 3

从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
Run Code Online (Sandbox Code Playgroud)
  1. FIDO ( https://fidoalliance.org/ )(自 Android 6 起)
a.  U2F (0000FFFD-0000-1000-8000-00805F9B34FB)
Run Code Online (Sandbox Code Playgroud)

只有具有BLUETOOTH_PRIVILEGED的应用程序,即使用与系统相同的证书签名的应用程序,才能够读取和写入这些特征的数据。