デバイスのBluetoothがオンになったときにトーストを表示するアプリを作成しようとしています。私のアプリが実行されていないときでもそれをしたいです。したがって、ブロードキャストレシーバーを使用し、いくつかの権限、インテントフィルターをAndroidマニフェストに追加し、Javaクラスを作成しますが、詳細はわかりません。 。
私は何をすべきか?どの権限を使用する必要がありますか?
許可に関する限り、bluetoothの状態変化を検出するには、これをAndroidManifest.xmlに追加する必要があります。
<uses-permission Android:name="Android.permission.BLUETOOTH" />
受信機の例は次のようになります。たとえば、アクティビティなど、ブロードキャストを処理する場所にこのコードを追加します。
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
public void onReceive (Context context, Intent intent) {
String action = intent.getAction();
if (BluetoothAdapter.ACTION_STATE_CHANGED.equals(action)) {
if(intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, -1)
== BluetoothAdapter.STATE_OFF)
// Bluetooth is disconnected, do handling here
}
}
};
受信機を使用するには、登録する必要があります。次のようにできます。メインアクティビティでレシーバーを登録します。
registerReceiver(this, new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED));
すべてをAndroidManifest.xmlに追加することもできます。この方法で、レシーバー用の特別なクラスを作成し、そこで処理できます。レシーバーを登録する必要はありません。クラスを作成し、以下のコードをAndroidManifestに追加するだけです
<receiver
Android:name=".packagename.NameOfBroadcastReceiverClass"
Android:enabled="true">
<intent-filter>
<action Android:name="Android.bluetooth.adapter.action.STATE_CHANGED"/>
</intent-filter>
</receiver>
次の許可を取得する必要があります。
<uses-permission Android:name="Android.permission.BLUETOOTH" />
そして、これをレシーバータグのインテントフィルターとして記述する必要があります。
<action Android:name="Android.bluetooth.adapter.action.STATE_CHANGED" />
残念ながら、アプリターゲティングapi 26以上では、マニフェスト宣言されたブロードキャストレシーバーは動作しません(ここを参照: https:// developer .Android.com/guide/components/broadcast-exceptions )、いくつかの例外があります。 Android.bluetooth.adapter.action.STATE_CHANGED
はそのリストにありません。
Bluetoothの場合、変更をリッスンできるのは次のもののみです。
ACTION_CONNECTION_STATE_CHANGED
、ACTION_ACL_CONNECTED
、ACTION_ACL_DISCONNECTED