BroadcastReceiver pour ACTION_MEDIA_BUTTON ne fonctionne pas
Je suis en train d'écrire une application Android pour la version 4.0.3 (ICS) de l'OS Android. Le problème est que je ne reçois pas la sortie de mon Journal.d() dans le onReceive() la méthode de la BroadcastReceiver qui signifie que ma demande n'est pas correctement la manipulation de l'émission.
J'ai lu d'innombrables questions sur la façon d'exécuter du code sur un ACTION_MEDIA_BUTTON être cliqué. J'ai même copier-collé du code lors de la mine n'a pas de travail, juste pour voir si ça marcherait.
La ACTION_MEDIA_BUTTON je veux traiter le unique bouton sur les écouteurs qui permettent à un utilisateur de ramassage /de fin des appels, lecture /pause de la musique. À la place de mon application de la manipulation de ce bouton, quand je clique dessus, le stock lecteur de musique sur mon Nexus S Android commence à jouer une chanson.
Je n'ai pas mis mon code dans une autre classe, c'est peut-être pourquoi il ne fonctionne pas?
Voici le code trouvé sur le onCreate (), méthode (ce code que j'ai copié à partir d'un site web après le code que j'ai écrit ne fonctionne pas):
IntentFilter mediaButtonFilter = new IntentFilter(
Intent.ACTION_MEDIA_BUTTON);
mediaButtonFilter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
BroadcastReceiver brMediaButton = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
Log.d("Event", "Media button!");
this.abortBroadcast();
KeyEvent key = (KeyEvent) intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT);
if(key.getAction() == KeyEvent.ACTION_UP) {
int keycode = key.getKeyCode();
if(keycode == KeyEvent.KEYCODE_MEDIA_NEXT) {
Log.d("TestApp", "Next Pressed");
} else if(keycode == KeyEvent.KEYCODE_MEDIA_PREVIOUS) {
Log.d("TestApp", "Previous pressed");
} else if(keycode == KeyEvent.KEYCODE_HEADSETHOOK) {
Log.d("TestApp", "Head Set Hook pressed");
}
}
}
};
registerReceiver(brMediaButton, mediaButtonFilter);
Tout ce que je vraiment besoin de le tester pour le KEYCODE_HEADSETHOOK mais il ne fait pas de mal pour avoir l'autre code pour le test, je vais le corriger une fois que je peux obtenir tout fonctionne correctement.
Dans mon manifeste:
<intent-filter android:priority="2147483647" >
<action android:name="android.intent.action.MEDIA_BUTTON" />
</intent-filter>
J'ai d'abord pensé que ceci peut être un problème d'autorisations puisque je n'ai pas de spécifier des autorisations pour cela, cependant je n'ai pas reçu de message d'erreur.
Comme je l'ai dit plus tôt, j'ai essayé de nombreuses variantes de ce. Un exemple est l'utilisation du code à ce lien broadcastreceiver onReceive problème ACTION_MEDIA_BUTTON Android avec CommonsWare de corrections. Encore une fois, cependant, je l'ai modifié de sorte qu'il n'était pas dans une salle de classe.
Je vous remercie d'avance pour votre aide.
J'ai presque le même code que vous et ça fonctionne sur Android 2.2 / 2.3. Mais comme vous, je ne peux pas le faire fonctionner avec ICS...
Même ici. Il fonctionne avant d'Android 4.0. L'API a changé ou quelque chose.
J'ai commencé un bounty sur la même question, je pense...stackoverflow.com/questions/13257982/...
OriginalL'auteur noahnu | 2012-04-16
Vous devez vous connecter pour publier un commentaire.
J'ai testé sur un Samsung Galaxy S5 avec Android 4.4.2. Donc ce qui est important et ce qui n'est pas mentionné dans d'autres commentaires:
Ok et voici quelques exemple de code:
Ici la récepteur:
Et ici le manifeste extrait. Si nécessaire ajouter de priorité pour la intent-filter, mais n'était pas nécessaire pour moi:
Pour les références:
OriginalL'auteur
Ce code aura pour effet de lier votre casque bouton de votre application et de votre application jusqu'à ce que vous appelez le:
registerMediaButtonEventReceiver()
, je le ferais 😉Où je peux enregistrer l'émission . J'ai enregistré le Récepteur dans le fichier de Manifeste seulement
OriginalL'auteur
Vous pouvez éviter d'utiliser le Broacastreceiver pour Android >5.0 (API level 21 SUCETTE) à l'aide de la MediaSession décrit ici: https://stackoverflow.com/a/39413753/1386969
OriginalL'auteur