如何在Android Pie中使用蓝牙HID设备配置文件?

11
我正在尝试使用Bluetooth HID设备配置文件服务编写Android P应用程序,以将其用作蓝牙键盘。根据文档,我应该使用方法BluetoothAdapter.getProfileProxy(Context,BluetoothProfile.ServiceListener,int)获取BluetoothHidDevice代理对象。
在我的Android Pie设备(Nokia 7 plus)上进行调试期间,服务侦听器从未被调用(onServiceConnected),并且我在Logcat中得到以下错误:
Could not bind to Bluetooth HID Device Service with Intent { act=android.bluetooth.IBluetoothHidDevice }
如果我将上述调用中的最后一个参数从更改为其他蓝牙配置文件,例如,则服务监听器会收到回调onServiceConnected,并且不会显示任何错误。
1. 有没有人在Android Pie上创建过可工作的HID_DEVICE? 2. 可以使用BluetoothHidDevice在Android Pie手机上创建hid设备吗? 3. 是否有任何可以查看的工作代码? 4. 我的手机是否缺少某些功能(getPackageManager().hasSystemFeature)? 5. 上述错误的原因可能是什么?
任何提示都将不胜感激 :)
这似乎是第三方问题。诺基亚没有在Android Pie上启用hid配置文件。我还尝试了Mototorola G7 play,它也被禁用了,我想现在该用像素了...

我曾尝试在Oreo 8.1上使用Xposed进行调整(因为它已经实现但被禁用和隐藏),并且我也遇到了这个问题。对我来说,这是因为清单中的服务被禁用了(android:enabled="@bool/profile_supported_hidd",而bool设置为false)。我通过 setComponentEnabledSetting 解决了这个问题。 - ralismark
我也会把这个放在这里.. 或许有人可以直接联系作者,看看他能否提供答案 https://www.xda-developers.com/android-p-bluetooth-keyboard-mouse/ - Somo S.
我已经在Google问题跟踪器中将此问题标记为错误。您可以给它加星以便更早地解决它。https://issuetracker.google.com/issues/125169815 ....您可能需要先登录。 - user rk
1
根据Google问题跟踪器,这可能是第三方问题。我可以确认,在OnePlus 6 / OxygenOS 9.0.4上,HID设备服务仍然被禁用,就像@ralismark在奥利奥中描述的那样。:( - Rudolf Potucek
嘿,@userrk和Kim,过去两年里你们有找到任何有用的东西吗?或者有些设备根本不支持吗? - Merthan Erdem
显示剩余3条评论
3个回答

7

当前在Pixel上启用了HID设备配置文件。据我所知,诺基亚、Moto(如上所述)以及One Plus 5T和6都不支持此配置文件。

我们创建了一个应用程序,可以让您使用此HID设备配置文件将手机用作蓝牙鼠标和键盘。 https://play.google.com/store/apps/details?id=com.github.roarappstudio.btkontroller

该代码已在https://github.com/raghavk92/Kontroller上开源。如果有人想帮助改进或贡献代码,他们是受欢迎的。

您还可以使用此应用程序检查您的手机是否支持蓝牙HID设备配置文件:https://play.google.com/store/apps/details?id=com.rkaneapplabs.bluetooth_hid.bluetoothproxy,并告诉设备制造商如果他们不支持您的设备,因为它是Android Pie的一部分,应该支持。

激活/由于制造商实施错误而无法正常工作的具有蓝牙HID设备配置文件的设备列表在此处-https://github.com/raghavk92/Android_Bluetooth_HID_Device_Profile_CompatibilityList

这些错误是由于制造商方面的实现而不是谷歌造成的,因为自Android Pie以来,Pixel设备支持此蓝牙HID设备配置文件。


3

这里有一个半官方的示例代码可供使用:https://github.com/ginkage/wearmouse,实际上是由Google自己提供的(请参见https://opensource.google.com/projects/wearmouse)。

它旨在用于Wear OS手表,但拥有一切你需要在手机上使用它的元素:代理类用于配置文件、回调类、HID描述符示例、QoS、用于从主机查询电池电量等情况的回调等。

该应用程序本身可在Google Play上获得:https://play.google.com/store/apps/details?id=com.ginkage.wearmouse(顺便说一下,该应用程序也支持Android 8,但仅适用于手表,而非手机)。


2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接