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

标签 android bluetooth bluetooth-lowenergy hid

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

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

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

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

其中之一是0x1812 HUMAN INTERFACE DEVICE ,其中包含几个 REPORT 类型的特征,其中描述了HID OVER GATT PROFILE SPECIFICATION (HOGP_SPEC)

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

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

我找不到这方面的任何信息。

我可以使用我的应用程序连接到设备,列举服务和特征。但从那时起,我不知道如何使用 HID。理想情况下,我会收到诸如“按钮 A 已按下”“操纵杆已移至 x=32”之类的通知,例如,x 的范围为 -127 到 127。

最佳答案

自 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 Protected services

Android does not allow to read or write data to the following characteristics (and their descriptors):

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

Only applications with BLUETOOTH_PRIVILEGED, that is, applications signed with the same certificate as the system, are able to read and write data to those characteristics.

关于Android:直接在应用程序中使用 HID over GATT(Gadget=HID → 控制应用程序),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47224180/

相关文章:

java - FreeTTS语音无输出Raspberry PI蓝牙音箱

android - 是否应该与蓝牙 LE 设备建立绑定(bind)

android - RxAndroidBLE 执行 BLE 扫描无需排队扫描操作

android - 美元符号后的正则表达式抓取数字

java - 如何从字符串类型的键值对中获取值?

java - 我的对象应该保存对象还是对象 ID?

java - InputStream.available() 在监听不断流式传输数据的蓝牙 RFCOMM 服务器时报告没有字节

linux - 将 BlueZ 堆栈用作外围设备时的有效载荷错误

c - memcpy vs 用于读取 BLE 传感器 float 的指针转换

javascript - 移动浏览器的样式下拉列表