在Android Oreo之前,要想在一个release版本的系统中录制蓝牙HCI log,可以通过打开“开发者选项->开启蓝牙HCI信息收集日志”选项。默认蓝牙的HCI log生成文件名为“bsnoop_hci.log”,位于“sdcard”目录。但是从Android Oreo开始,google做了一些调整,原有的路子已经走不通了。如何解决呢?答案是,自己实现一个录制蓝牙HCI log的应用,从127.0.0.1:8872那里接受数据,保存到sdcard。
开发者选项的实现
从UI上看,“开启蓝牙HCI信息收集日志”的开发者选项,是一个SwitchPreference。对于Oreo,具体的代码位于:
packages/apps/Settings/src/com/android/settings/development/DevelopmentSettings.java
DevelopmentSettings本身实现了很多interface,包括OnPreferenceChangeListener,因此HCI日志的开关也是在这里处理。
/*
* Displays preferences for application developers.
*/
public class DevelopmentSettings extends RestrictedSettingsFragment
implements DialogInterface.OnClickListener, DialogInterface.OnDismissListener,
OnPreferenceChangeListener, Switch