Android BroadcastReceiver wird nicht registriert

Ich versuche, meiner Audioanwendung einen einfachen Rundfunkempfänger hinzuzufügen, damit ich alles stumm schalten kann, wenn der Benutzer auf die ACTION_MEDIA_BUTTON auf seinem Headset klickt. Ich habe gelesen, dass Sie es entweder im Manifest oder dynamisch im Code registrieren können. Ich bin den Weg der Registrierung im Code gegangen, da ich Methoden in meiner Hauptaktivitätsklasse aufrufen muss, um auf das Drücken der Medientaste zu reagieren. Aus irgendeinem Grund registriert sich mein BroadcastReceiver jedoch nicht und ich kann nichts finden, was den Grund erklärt (graue Haare nehmen zu).

Folgendes habe ich in MainActivity.java:

public class MainActivity extends Activity {

  public IntentFilter intentFilter = new IntentFilter(Intent.ACTION_MEDIA_BUTTON);

  public BroadcastReceiver MediaButtonIntentReceiver =
            new BroadcastReceiver() {
                @Override
                public void onReceive(Context context, Intent intent) {

                    String intentAction = intent.getAction();
                    if (Intent.ACTION_MEDIA_BUTTON.equals(intentAction)) {
                        KeyEvent event = (KeyEvent) intent
                                .getParcelableExtra(Intent.EXTRA_KEY_EVENT);
                        int action = event.getAction();
                        if (action == KeyEvent.ACTION_DOWN) {

                            Log.e("INFO", "Media Button Pressed");
                            MuteAll();

                        }


                }
           }
  };

  @Override
  public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);       

      // Register media button event receiver
      intentFilter.addAction("android.intent.action.ACTION_MEDIA_BUTTON");
      intentFilter.setPriority(10000);
      this.registerReceiver(MediaButtonIntentReceiver, intentFilter);

      }

@Override
protected void onDestroy() {
    super.onDestroy();

    // Unregister media button event receiver
    unregisterReceiver(MediaButtonIntentReceiver);

    }
};

Ich bin mir sicher, dass der BroadcastReceiver nicht registriert wird, da mir das Einpacken des Registers wie folgt einen Toast gibt, der bestätigt, dass es null ist:

  if (registerReceiver(MediaButtonIntentReceiver, intentFilter) == null) 
  {
      Toast.makeText(this, "Could not register receiver", Toast.LENGTH_LONG).show();
  } else {
      Toast.makeText(this, "Receiver registered", Toast.LENGTH_LONG).show();
  }

BEARBEITEN: Ich habe auch Folgendes versucht, basierend auf Vorschlägen:

Durchlesen -http://developer.android.com/training/managing-audio/volume-playback.html Ich habe versucht, meinen Empfänger innerhalb des Manifests wie folgt zu registrieren ...

<receiver android:name="com.mydomain.myapp.MainActivity$MediaButtonIntentReceiver">
    <intent-filter>
        <action android:name="android.intent.action.MEDIA_BUTTON" />
    </intent-filter>
</receiver>

And then added the following example code:
public AudioManager am = mContext.getSystemService(Context.AUDIO_SERVICE);
...
// Start listening for button presses
am.registerMediaButtonEventReceiver(RemoteControlReceiver);

Eclipse beklagte sich darüber, dass mContext nicht in irgendetwas aufgelöst wurde, und ich fügte Folgendes hinzu:

private Context mContext;

Dann beschwerte es sich über den Abschnitt "mContext.getSystemService (Context.AUDIO_SERVICE)" und sagte: "Typenkonflikt: Konvertierung von Object zu AudioManager nicht möglich".

Also habe ich AudioManager eine Besetzung hinzugefügt:

public AudioManager am = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);

Und dann den vorgeschlagenen Empfänger-Registrierungscode hinzugefügt:

am.registerMediaButtonEventReceiver(MediaButtonIntentReceiver);

Worauf es sich beschwerte, wenn "registerMediaButtonEventReceiver" sagte: "Die Methode registerMediaButtonEventReceiver (ComponentName) vom Typ AudioManager ist für die Argumente (BroadcastReceiver) nicht anwendbar."

Klar mache ich hier was falsch. Ich habe ihren Beispielcode wie gezeigt eingegeben, aber er lässt sich nicht einmal kompilieren.

--- END EDIT -----------------------------

Wenn Sie hoffen, dass jemand da draußen ist, können Sie mir helfen. Bitte lassen Sie mich wissen, wenn ich etwas weiter liefern muss.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage