いくつかのログを記録する目的で、デバイスでBluetooth HCIログを有効にする必要があります。もちろんこれはDevelopers Settingsメニューから簡単に行うことができますが、私のユーザのほとんどはそれに精通しておらず、プログラマチックにやりたいと思います。これらのデバイスはルートされないので、手動でbt_stack.confファイルを編集することはできません。プログラムでBluetooth HCIログを有効にする
インターネット経由で検索しているうちに、非表示のAPIメソッドBluetoothAdapter.configHciSnoopLog()
が見つかりました。私は本当にSDKのjarファイルを台無しにしたくないので、私は、このメソッドにアクセスするためにリフレクションを使用したい、このように:
Method configHciSnoopLogMethod = BluetoothAdapter.class.getDeclaredMethod("configHciSnoopLog", boolean.class);
Object r = configHciSnoopLogMethod.invoke(BluetoothAdapter.getDefaultAdapter(), true);
これは程度にうまく機能〜私がテストしたデバイスの20%(true
を返します。 )残りの部分はfalse
(約20種類のデバイスのうち)を返します。私はアプリに正しいBLUETOOTH_ADMIN
権限を与えているので、なぜそれが動作しているのか分かりません。メインの設定アプリケーション用のAOSPソースコードを見てみると、これはまさに内部で行っていることです(もちろん反映されません)。私が紛失しているものはありますか?いくつかの権限を追加する必要がありますか?
ありがとうございました!