web-dev-qa-db-fra.com

Comment détecter un changement d'état Bluetooth à l'aide d'un récepteur de diffusion?

J'essaie de créer une application qui affiche un toast lorsque le Bluetooth de l'appareil est activé. Je veux le faire même lorsque mon application ne fonctionne pas. Je devrais donc utiliser un récepteur de diffusion, ajouter des autorisations, un filtre d'intention à Android manifeste et créer une classe Java mais je ne connais pas les détails) .

Que devrais-je faire? Quelles autorisations dois-je utiliser?

31
Mohammad H

En ce qui concerne les autorisations, pour détecter le changement d'état de Bluetooth, vous devez l'ajouter à votre AndroidManifest.xml.

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

Un exemple de récepteur ressemblerait à ceci, vous ajoutez ce code à l'endroit où vous souhaitez gérer la diffusion, par exemple une activité:

    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
}

}

        };

Pour utiliser le récepteur, vous devez l'enregistrer. Ce que vous pouvez faire comme suit. J'enregistre le récepteur dans mon activité principale.

registerReceiver(this, new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED));

Vous pouvez également décider de tout ajouter à votre AndroidManifest.xml. De cette façon, vous pouvez créer une classe spéciale pour le récepteur et la gérer là-bas. Pas besoin d'enregistrer le récepteur, créez simplement la classe et ajoutez le code ci-dessous au manifeste Android

<receiver
        Android:name=".packagename.NameOfBroadcastReceiverClass"
        Android:enabled="true">
    <intent-filter>
        <action Android:name="Android.bluetooth.adapter.action.STATE_CHANGED"/>
    </intent-filter>
</receiver>
72
paNji

Vous devez prendre la permission suivante.

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

et vous devez l'écrire comme filtre d'intention dans la balise du récepteur.

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

Malheureusement, pour les applications ciblant api 26 ou supérieur, les récepteurs de diffusion déclarés manifestes ne fonctionnent plus (référence ici: https: // développeur .Android.com/guide/components/broadcast-exceptions ), avec quelques exceptions. Android.bluetooth.adapter.action.STATE_CHANGED n'est pas dans cette liste.

Pour le bluetooth, vous ne pouvez écouter les modifications que sur:

ACTION_CONNECTION_STATE_CHANGED, ACTION_ACL_CONNECTED, ACTION_ACL_DISCONNECTED

4
Nicola Gallazzi