Enable Bluetooth HCI log programmatically

710 views Asked by At

For some logging purposes I need to enable Bluetooth HCI log on my device. Of course this can be easily done from the Developers Settings menu, but most of my users won't be familiar with that and I would like to do it programatically. These devices won't be rooted, so I can't manually edit bt_stack.conf file.

While searching through the internet, I found a hidden API method BluetoothAdapter.configHciSnoopLog(). I don't really want to mess with SDK jars, so I wanted to use reflection in order to access this method, like this:

Method configHciSnoopLogMethod = BluetoothAdapter.class.getDeclaredMethod("configHciSnoopLog", boolean.class);
Object r = configHciSnoopLogMethod.invoke(BluetoothAdapter.getDefaultAdapter(), true);

This works well on about ~20% of devices I tested (returns true) but returns false for the rest (out of ~20 different devices). I am giving the app correct BLUETOOTH_ADMIN permission, so I don't know why it's not working. As I looked at the AOSP source code for main Settings application, this is exactly what it it doing internally (just without reflection of course). Is there something I am missing? Some permission that should be added?

1

There are 1 answers

1
eric On
Settings.Secure.putInt(context.getContentResolver(), "bluetooth_hci_log", 1);