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.

Veuillez consulter this et this Espérons que cela permettra de résoudre votre problème
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