web-dev-qa-db-ja.com

ブロードキャストレシーバーを使用してBluetoothの状態変化を検出する方法

デバイスのBluetoothがオンになったときにトーストを表示するアプリを作成しようとしています。私のアプリが実行されていないときでもそれをしたいです。したがって、ブロードキャストレシーバーを使用し、いくつかの権限、インテントフィルターをAndroidマニフェストに追加し、Javaクラスを作成しますが、詳細はわかりません。 。

私は何をすべきか?どの権限を使用する必要がありますか?

31
Mohammad H

許可に関する限り、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>
72
paNji

次の許可を取得する必要があります。

<uses-permission Android:name="Android.permission.BLUETOOTH" />

そして、これをレシーバータグのインテントフィルターとして記述する必要があります。

<action Android:name="Android.bluetooth.adapter.action.STATE_CHANGED" />
21

残念ながら、アプリターゲティングapi 26以上では、マニフェスト宣言されたブロードキャストレシーバーは動作しません(ここを参照: https:// developer .Android.com/guide/components/broadcast-exceptions )、いくつかの例外があります。 Android.bluetooth.adapter.action.STATE_CHANGEDはそのリストにありません。

Bluetoothの場合、変更をリッスンできるのは次のもののみです。

ACTION_CONNECTION_STATE_CHANGEDACTION_ACL_CONNECTEDACTION_ACL_DISCONNECTED

4
Nicola Gallazzi