2016-12-29 12 views
0

Для некоторых целей ведения журнала мне нужно включить Bluetooth HCI-журнал на моем устройстве. Конечно, это можно легко сделать из меню «Настройки разработчиков», но большинство моих пользователей не знакомы с этим, и я хотел бы сделать это программно. Эти устройства не будут внедрены, поэтому я не могу вручную отредактировать файл bt_stack.conf.Включить протокол Bluetooth HCI программно

При поиске в Интернете я нашел скрытый API-метод BluetoothAdapter.configHciSnoopLog(). Я не хочу возиться с SDK баночками, поэтому я хотел бы использовать отражение для того, чтобы получить доступ к этому методу, как это:

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

Это хорошо работает около ~ 20% устройств, которые я тестировал (возвращает true), но возвращает false для остальных (из ~ 20 различных устройств). Я даю правильное приложение BLUETOOTH_ADMIN, поэтому я не знаю, почему он не работает. Поскольку я смотрел исходный код AOSP для основного приложения Settings, это именно то, что он делает внутри (просто без отражения, конечно). Есть что-то, чего я не хватает? Некоторые разрешения, которые необходимо добавить?

Спасибо за помощь!

ответ

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