Intent.ACTION_HEADSET_PLUG est reçu lorsque l'activité démarre
Je suis en train de mettre en pause la musique en cours de lecture lorsque le casque est débranché.
J'ai créé un BroadcastReceiver qui écoute ACTION_HEADSET_PLUG les intentions et les actes sur eux quand la état supplémentaire est 0 (débranché). Mon problème est que ACTION_HEADSET_PLUG intention est reçu par mon BroadcastReceiver chaque fois que l'activité est commencé. Ce n'est pas le comportement que je m'attends. J'attendrais la volonté d'être déclenché que lorsque le casque est branché ou débranché.
Est-il une raison que l'ACTION_HEADSET_PLUG Intention est pris immédiatement après l'enregistrement d'un récepteur avec qui IntentFilter? Est-il une manière que je peux travailler avec ce problème?
Je suppose que depuis le lecteur de musique par défaut implémente une fonctionnalité similaire lorsque le casque est débranché qu'il serait possible.
Ce qui me manque?
C'est le code d'enregistrement
registerReceiver(new HeadsetConnectionReceiver(),
new IntentFilter(Intent.ACTION_HEADSET_PLUG));
C'est la définition de HeadsetConnectionReceiver
public class HeadsetConnectionReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
Log.w(TAG, "ACTION_HEADSET_PLUG Intent received");
}
}
source d'informationauteur Doug Miller
Vous devez vous connecter pour publier un commentaire.
Merci pour la réponse de Jake. J'aurais mis à jour le post original pour indiquer que j'ai découvert le problème que j'avais. Après un peu de recherche, j'ai découvert que la ACTION_HEADSET_PLUG Intention est diffusée à l'aide de la sendStickyBroadcast méthode dans le Contexte.
Collant Intentions sont détenues par le système après sa diffusion. Cette Intention doit être pris chaque fois qu'un nouveau BroadcastReceiver est inscrit pour recevoir. Il est déclenché immédiatement après l'enregistrement, qui contient la dernière mise à jour de la valeur. Dans le cas du casque, il est utile d'être en mesure de déterminer que le kit oreillette est déjà branché lors de la première inscription de votre récepteur.
C'est le code que j'ai utilisé pour recevoir le ACTION_HEADSET_PLUG Intention:
- Je utiliser une approche différente pour arrêter la lecture lorsque le casque est le débrancher. Je ne veux pas que vous l'utiliser puisque vous êtes déjà bien, mais d'autres personnes peuvent trouver utile. Si vous en prenez le contrôle de l'audio focus, puis Android va vous envoyer un événement audio devient bruyant, donc si vous écrivez un récepteur pour cet événement, il ressemblera à
Je suis tombé sur le même problème. Je ne suis pas sûr de ce qui la cause, mais au moins dans mon test, il semble être compatible, ce qui signifie que vous pouvez travailler autour d'elle. Je n'ai juste que par l'ajout d'un booléen variable membre qui commence comme vrai, et est définie sur false dans le premier
onReceive(Context, Intent)
appel. Ce drapeau ensuite contrôler si j'ai réellement traiter la débrancher de l'événement ou pas.Pour votre référence, voici le code que j'utilise pour le faire, qui est disponible dans le contexte ici.