Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can i use the Bluetooth HID Device profile in Android Pie?

I am trying to write an app for Android P using the Bluetooth HID device profile service to be used as a Bluetooth keyboard. According to the documentation I am supposed to use the method BluetoothAdapter.getProfileProxy(Context, BluetoothProfile.ServiceListener, int) to get the BluetoothHidDevice proxy object.

During debug on my Android Pie device (Nokia 7 plus) the service listener never get called (onServiceConnected), and i get the following error in Logcat:

Could not bind to Bluetooth HID Device Service with Intent { act=android.bluetooth.IBluetoothHidDevice }

If I change the last param in the call above from HID_DEVICE to some other bluetooth profile e.g. A2DP, the service listener get the callback onServiceConnected and no error is displayed.

  1. Has anyone created a working HID_DEVICE on Android Pie?
  2. Can BluetoothHidDevice be used to create a hid-device on an Android Pie phone?
  3. Is there any working code that i can look at?
  4. Is there some feature (getPackageManager().hasSystemFeature) missing in my phone?
  5. What could be the reason for the error above?

Any hints would be greatly appreciated :)

This seems to be a third-party issue. Nokia did not enable the hid-profile in Android Pie. I also tried with a Mototorola G7 play, it was also disabled, i guess it's time for a pixel...

like image 301
Kim Avatar asked Feb 04 '23 20:02

Kim


2 Answers

Currently on pixel the HID device Profile is enabled . Nokia, moto(as mentioned above) and One Plus 5T and 6 as far as i know dont support this profile.

We have created an app which lets you use your phone as a bluetooth mouse and keyboard with this HID device profile. https://play.google.com/store/apps/details?id=com.github.roarappstudio.btkontroller

The code is open sourced at https://github.com/raghavk92/Kontroller. If anyone wants to help in making improvements or contribute to the code they are welcome.

You can also check if your phone supports Bluetooth HID device profile with the app - https://play.google.com/store/apps/details?id=com.rkaneapplabs.bluetooth_hid.bluetoothproxy and let your device manufacturer know if they dont support your device because its part of android pie and should be supported.

List of devices that have the Bluetooth HID device profile activated/Not Working(due to manufacturer implementation bugs) is here - https://github.com/raghavk92/Android_Bluetooth_HID_Device_Profile_CompatibilityList

The bugs are due to implementation on the manufacturer's side not google as pixel devices support this Bluetooth HID device profile since android pie

like image 137
user rk Avatar answered Feb 06 '23 16:02

user rk


There is a semi-official sample code available here: https://github.com/ginkage/wearmouse — actually by Google itself (see https://opensource.google.com/projects/wearmouse).

It is intended for using on Wear OS watches, but has everything you need to use it on a phone as well: proxy class for the profile, a callback class, HID Descriptor example, QoS, callbacks for cases like battery level inquiry from the host, etc.

The app itself is available at Google Play here: https://play.google.com/store/apps/details?id=com.ginkage.wearmouse (the app supports Android 8 as well, by the way, but that only works on watches, not phones).

like image 31
Ivan Podogov Avatar answered Feb 06 '23 15:02

Ivan Podogov