MediaButtonIntentReceiver funktioniert ab Android 4.0 nicht mehr

Das Ziel besteht darin, Sendungen vom Headset und eventuell auch von Bluetooth abzufangen, um auf verschiedene Arten von Klicks vom Headset zu reagieren und den Mediaplayer zu ändern. Diese Lösung funktioniert problemlos für alle Versionen vor ICS. Hier sind einige der Codes und Dinge, die ich ausprobiert habe:

....
private BroadcastReceiver mediaButtonReceiver = new MediaButtonIntentReceiver();
....
public void onCreate() {
    ...
    IntentFilter mediaFilter = new IntentFilter(Intent.ACTION_MEDIA_BUTTON);
    mediaFilter.setPriority(2147483647); // this is bad...I know
    this.registerReceiver(mediaButtonReceiver, mediaFilter);
    ...
}

public class MediaButtonIntentReceiver extends BroadcastReceiver {

    private KeyEvent event;

    public MediaButtonIntentReceiver() {
        super();
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        String intentAction = intent.getAction();
        if (!Intent.ACTION_MEDIA_BUTTON.equals(intentAction)) {
            return;
        }
        event = (KeyEvent)intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT);
        if (event == null) {
            return;
        }
        try {
            int action = event.getAction();

            switch(action) {

                case KeyEvent.ACTION_UP :
                    Log.d("TEST", "BUTTON UP");
                    break;
                case KeyEvent.ACTION_DOWN :
                case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE :
                    Log.d("TEST", "BUTTON DOWN");
                    break;
            }
        } catch (Exception e) {
            Log.d("TEST", "THIS IS NOT GOOD");
        }
        abortBroadcast();
    }
}

Um zu versuchen, dies zum Laufen zu bringen, klingt es so, als würde 4.0+ etwas Ähnliches erfordern, was nicht funktioniert hat:

((AudioManager)getSystemService(AUDIO_SERVICE)).registerMediaButtonEventReceiver(new ComponentName(this, MediaButtonIntentReceiver.class));

Ich habe sogar versucht, es dem Manifest hinzuzufügen, zusätzlich zu den oben genannten:

    <receiver android:name=".MediaButtonIntentReceiver" android:enabled="true">
        <intent-filter android:priority="2147483647" >
            <action android:name="android.intent.action.MEDIA_BUTTON" />
        </intent-filter>
    </receiver>

Immer noch kein Glück. Was vermisse ich hier? Es ist sicherlich ein 4.0 + / ICS / JellyBean-Problem ... Dies wird in einem Service durchgeführt, nicht in einer Aktivität.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage