Android:直接在应用程序中使用 HID over GATT(Gadget=HID → 控制应用程序)
Posted
技术标签:
【中文标题】Android:直接在应用程序中使用 HID over GATT(Gadget=HID → 控制应用程序)【英文标题】:Android: Using HID over GATT directly in Application (Gadget=HID → control Application) 【发布时间】:2017-11-10 13:43:40 【问题描述】:我有一个带有几个按钮的蓝牙 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,例如。
【问题讨论】:
不管怎样,一个朋友中风了,现在几乎不能说话。我期待创建一个可以通过 10 美元的多按钮/操纵杆 BLE 设备轻松控制的应用程序。将是开源的。 Daniel 做得很好,按下按钮时设备是否通过任何类型的确认 没有。连接后,我会“订阅”onServicesDiscovered
中报告特征的通知。但我从未从设备收到任何其他信息,onCharacteristicChanged
不会在按下按钮时被调用。我正在阅读github.com/kshoji/BLE-HID-Peripheral-for-Android/blob/master/…,以尝试了解 HID 设备的行为方式。也许我需要以某种方式绑定它。
你也许应该做一个 GATT 服务器连接?也许下一个答案应该可以帮助您咬一口:***.com/questions/55680180/…
【参考方案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 不允许对以下特征(及其描述符)读取或写入数据:
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 的应用程序,即已签名的应用程序 具有与系统相同的证书,能够读写 这些特征的数据。
【讨论】:
以上是关于Android:直接在应用程序中使用 HID over GATT(Gadget=HID → 控制应用程序)的主要内容,如果未能解决你的问题,请参考以下文章