【发布时间】:2016-12-29 11:53:40
【问题描述】:
出于某些日志记录目的,我需要在我的设备上启用蓝牙 HCI 日志。当然,这可以通过“开发者设置”菜单轻松完成,但我的大多数用户都不熟悉它,我想以编程方式进行。这些设备不会被植根,所以我不能手动编辑 bt_stack.conf 文件。
在网上搜索时,我发现了一个隐藏的 API 方法BluetoothAdapter.configHciSnoopLog()。我真的不想弄乱SDK jar,所以我想使用反射来访问这个方法,如下所示:
Method configHciSnoopLogMethod = BluetoothAdapter.class.getDeclaredMethod("configHciSnoopLog", boolean.class);
Object r = configHciSnoopLogMethod.invoke(BluetoothAdapter.getDefaultAdapter(), true);
这在我测试的大约 20% 的设备上运行良好(返回 true),但在其余设备(大约 20 种不同的设备中)返回 false。我正在给应用程序正确的BLUETOOTH_ADMIN 权限,所以我不知道为什么它不起作用。当我查看主设置应用程序的 AOSP 源代码时,这正是它在内部所做的(当然只是没有反射)。有什么我想念的吗?应该添加一些权限?
【问题讨论】:
标签: android reflection bluetooth hci