为了某些记录目的,我需要在设备上启用蓝牙HCI登录。当然,这可以从开发人员设置菜单中轻松完成,但是我的大多数用户都不熟悉这一点,我想从编程中进行。这些设备不会扎根,因此我无法手动编辑bt_stack.conf文件。
在通过Internet进行搜索时,我找到了一个隐藏的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.Secure.putInt(context.getContentResolver(), "bluetooth_hci_log", 1);