Android Récepteur de Radiodiffusion bluetooth événements de capture
Je suis en train d'essayer d'attraper bluetooth changements d'état avec Récepteur de Radiodiffusion.
Mon manifeste:
<uses-permission android:name="android.permission.BLUETOOTH" />
<application>
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name=".BluetoothBroadcastReceiver"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.bluetooth.adapter.action.STATE_CHANGED" />
<action android:name="android.bluetooth.adapter.action.CONNECTION_STATE_CHANGED" />
<action android:name="android.bluetooth.device.action.ACL_CONNECTED" />
<action android:name="android.bluetooth.device.action.ACL_DISCONNECTED" />
</intent-filter>
</receiver>
</application>
Récepteur onReceive
méthode:
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
Log.d("BroadcastActions", "Action "+action+"received");
int state;
BluetoothDevice bluetoothDevice;
switch(action)
{
case BluetoothAdapter.ACTION_STATE_CHANGED:
state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, -1);
if (state == BluetoothAdapter.STATE_OFF)
{
Toast.makeText(context, "Bluetooth is off", Toast.LENGTH_SHORT).show();
Log.d("BroadcastActions", "Bluetooth is off");
}
else if (state == BluetoothAdapter.STATE_TURNING_OFF)
{
Toast.makeText(context, "Bluetooth is turning off", Toast.LENGTH_SHORT).show();
Log.d("BroadcastActions", "Bluetooth is turning off");
}
else if(state == BluetoothAdapter.STATE_ON)
{
Log.d("BroadcastActions", "Bluetooth is on");
}
break;
case BluetoothDevice.ACTION_ACL_CONNECTED:
bluetoothDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
Toast.makeText(context, "Connected to "+bluetoothDevice.getName(),
Toast.LENGTH_SHORT).show();
Log.d("BroadcastActions", "Connected to "+bluetoothDevice.getName());
break;
case BluetoothDevice.ACTION_ACL_DISCONNECTED:
bluetoothDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
Toast.makeText(context, "Disconnected from "+bluetoothDevice.getName(),
Toast.LENGTH_SHORT).show();
break;
}
}
J'ai lancer l'application puis réduisez-le en appuyant sur la touche Home. Aller dans les paramètres et activer le bluetooth, mais rien ne se passe. Mais j'attends de pain grillé et de logcat messages. Quel est le problème ici?
Pas sûr, il peut être à cause de la façon dont la diffusion enregistré. Je voudrais essayer de s'inscrire au service, et non au moment de l'exécution et de voir si cela change quoi que ce soit.
Yep, j'ai essayé d'ajouter le service où je m'inscrire récepteur. Il ressemblait à ce
Ne vous lancez le Service dans un certain endroit ?
Merci. C'était un émulateur problème. Sur le périphérique réel, il fonctionne très bien.
Yep, j'ai essayé d'ajouter le service où je m'inscrire récepteur. Il ressemblait à ce
IntentFilter fltr = new IntentFilter(BluetoothDevice.ACTION_ACL_CONNECTED); fltr.addAction(BluetoothDevice.ACTION_ACL_DISCONNECTED); fltr.addAction(BluetoothAdapter.ACTION_CONNECTION_STATE_CHANGED); fltr.addAction(BluetoothAdapter.ACTION_STATE_CHANGED); registerReceiver(brecv, fltr);
où brecv
est un objet de CustomBluetoothReceiver. Il n'y avait pas toutes les modifications.Ne vous lancez le Service dans un certain endroit ?
Merci. C'était un émulateur problème. Sur le périphérique réel, il fonctionne très bien.
OriginalL'auteur Long Smith | 2015-05-13
Vous devez vous connecter pour publier un commentaire.
Pour attraper Bluetooth changements d'état (
STATE_OFF
,STATE_TURNING_ON
,STATE_ON
,STATE_TURNING_OFF
), dans votre Activité:Tout d'abord, ajoutez Bluetooth la permission de votre fichier AndroidManifest:
Créer un BroadcastReceiver dans votre Activité ou de Service:
Créer un IntentFilter et l'enregistrer avec BroadcastReceiver d'Activité/Service dans votre
onCreate()
méthode:Annuler l'inscription de BroadcastReceiver dans votre
onDestroy()
méthode:Afin de capturer les changements de détection de l'appareil (
SCAN_MODE_NONE
,SCAN_MODE_CONNECTABLE
,SCAN_MODE_CONNECTABLE_DISCOVERABLE
), créer un autre BroadcastReceiver et s'inscrire/se désinscrire de votre Activité comme je l'ai mentionné ci-dessus. Seule différence entre ces BroadcastReceiver est la première utiliseBluetoothAdapter.EXTRA_STATE
et de l'autre on utiliseBluetoothAdapter.EXTRA_SCAN_MODE
. Voici l'exemple de code pour BroadcastReceiver pour attraper la détection des changements:Créer un filtre et de l'inscrire dans
onCreate()
méthode:Créer le BroadcastReciver de l'Activité/Service d'attraper la détection des changements:
Et enfin il désinscription dans
onDestroy()
:Note que, vous n'avez pas besoin d'ajouter de
<intent-filter>
ou<receiver>
à votre fichier AndroidManifest, sauf que vous devez ajouter Bluetooth autorisation, bien sûr.Si vous voulez attraper (
ACTION_ACL_CONNECTED
,ACTION_ACL_DISCONNECTED
,ACTION_ACL_DISCONNECT_REQUESTED
), maintenant, vous devez ajouter un<intent-filter>
à votre fichier AndroidManifest:Créer un filtre et de l'inscrire dans
onCreate()
méthode:Ensuite créer le BroadcastReceiver dans votre Activité/Service:
Et enfin, annuler l'inscription:
Si vous voulez en savoir plus sur l'état des constantes, c'est à partir de la documentation:
Fait quelque chose de changer dans le Oreo? Cela ne semble pas tirer plus
developer.android.com/guide/components/...: "Début avec Android 8.0 API (niveau 26), le système impose des restrictions supplémentaires sur le manifeste déclaré par les récepteurs. Si votre application les objectifs de l'API de niveau 26 ou plus, vous ne pouvez pas utiliser le manifeste de déclarer un récepteur pour la plupart implicites des émissions (émissions qui ne sont pas la cible de votre application spécifique)."
Cette réponse est tout simplement magnifique. Merci.
OriginalL'auteur Mustafa Berkay Mutlu
Votre problème principal 😉 Vous ne pouvez pas utiliser "switch" pour la comparaison de chaînes.
Au moins pas jusqu'à ce que VERSION_INT de 18 ans (inclus). La Version 19 introduction à Java 7.
OriginalL'auteur chksr