GPS*_*GPS 5 android bluetooth hid android-source android-intent
我有一个蓝牙HID设备,我需要得到工作与在Android 5.0分叉一台Nexus 7平板电脑2013运行自定义生成运行我的应用程序。所以:
@hide
不是约束现在我的设备有一个键盘,并且发送和接受一些供应商特定的 HID 报告。通过工作,我的意思是发送和接收所有 HID 报告
基于我所做的 AOSP 源代码探索,似乎:
该HidService
服务广播BluetoothInputDevice.ACTION_REPORT
所有输入 HID 报告的意图 [我的应用程序有一个BroadcastReceiver
接收ACTION_REPORT
意图]
BluetoothInputDevice
提供了其他的接口等setReport()
,sendData()
,connect()
通过等HidService
。
BluetoothInputDevice
用于HidService
提供 HID 设备接口。
HidService.java
是一个 JNI 包装器 com_android_bluetooth_hid.cpp
com_android_bluetooth_hid.cpp
,在 初始化时HidService
,将自己的回调注册到 Bluedroid
我已将日志添加到 AOSP 以跟踪调用,似乎以上所有内容都是正确的。
但
在get_report_callback()
中com_android_bluetooth_hid.cpp
不会被调用,因此,我的应用程序不接收ACTION_REPORT
意向。
如果我ACTION_REPORT
从我的应用程序发送虚拟意图,那么我BroadcastReceiver
会收到这些意图。
我的 HID 设备已连接并正常工作,因为我确实在我的应用程序的 edittext 字段中看到了收到的键。
有什么办法可以在我的应用程序中接收设备的 HID 报告?通过意图还是通过任何其他方式?
如果我可以通过 Intents 接收,是否有遗漏的步骤?我基本上只有BroadcastReceiver
意图过滤器BLUETOOTH
和BLUETOOTH_ADMIN
权限接收HID报告。
如果必须使用任何其他方法,请提出建议。
[更新2]
我可能没有明确提及,但我使用的设备通过 GATT 实现 HID,并且是 BLE 设备。
在较新的 Android 版本(7、8、9)上,我可以通过订阅 HID 报告通知、添加 BLUETOOTH_PRIVILEGGED 权限以及安装为平台应用程序来接收 HID 报告。
这些版本不需要其他 Android 代码。我没有(也不会)使用旧版本的 Android 进行测试,但这个解决方案可能已经在那里工作了。
[上一个答案]
蓝牙输入设备根本不起作用。
我使用 C 代码中的 /dev/hidraw* 来访问蓝牙 hidraw 设备。
/dev/hidraw* 节点不报告 MAC 地址。
在 Android 5.x 中,它们可以工作,并且所有设置/发送/接收报告操作都可以工作。没有得到测试。
在 Android 6.x 上,只有 recv 操作可以从 /dev/hidraw 进行。设置/发送不起作用。没有得到测试。
当我有更好的答案时,我会发布更新。
更新
我修改了 bluedroid 并在其中添加了一个小型 unix-socket 服务器。Bluedroid 将所有传入的 HID 报告传送到该服务器,并接受来自该服务器的传出 HID 报告。我的应用程序通过未命名的套接字与该服务器通信。一切都很好。
我只需要正确设置套接字的权限 SELinux 即可使其工作。
这适用于我可以测试的所有 Bluedroid 版本(4.4 - 6.0),但每个版本的 Bluedroid 都需要它自己的补丁版本。
归档时间: |
|
查看次数: |
2293 次 |
最近记录: |