Dynamic BroadcastReceiver: LocalBroadcastManager.registerReceiver vs registerReceiver

Ich versuche, Sendungen von einem Dienst mit 2 verschiedenen Empfängern zu empfangen. Eine Empfängeraktualisierung ist eine Ansicht, sodass ich sie in der onResume-Methode der Aktivität registriere.

Wenn sich die App nicht im Vordergrund befindet, verwende ich den anderen Empfänger, damit ich eine Systembenachrichtigung anzeigen kann, wenn der Hintergrunddienst abgeschlossen ist.

Der folgende Code zeigt, wie ich meine Empfänger registriere:

@Override
protected void onPause() {
    // unregister local
    unregisterReceiver(localReceiver);

    // register remote
    registerReceiver(remoteReceiver, filter);
    super.onPause();
}

@Override
protected void onResume() {
    super.onResume();
    // remove remote receiver
    // since remote is only registered in onPause it won't be registered during the first onResume call
    // so we want to ignore any exceptions
    try {
        unregisterReceiver(remoteReceiver);
    } catch (IllegalArgumentException e) {
        Log.e(LOG_TAG, "No receiver registered, could be first time");
    }

    // add local receiver
    registerReceiver(localReceiver, filter);
    Log.i(LOG_TAG, "resumed. should be registered");
}

Die beiden Empfänger werden oben in der Aktivitätsklasse wie folgt instanziiert:

BroadcastReceiver localReceiver = new BroadcastReceiver() { ... };

WaitTimeReceiver remoteReceiver = new WaitTimeReceiver();

Der Dienst macht die Absicht als:

broadcastIntent = new Intent(Support.SERVICE_BR);
broadcastIntent.addCategory(Intent.CATEGORY_DEFAULT);

// later on sends using
sendBroadcast(broadcastIntent);

Der Filter in der Aktivität stimmt überein mit:

filter.addAction(Support.SERVICE_BR);
filter.addCategory(Intent.CATEGORY_DEFAULT);

Alles oben funktioniert, die Funktion zum Anhalten des Lebenslaufs funktioniert wie erwartet, aber meine Frage ist, warum der LocalBroadcastManager nicht funktioniert hat.

UsingLocalBroadcastManager lbm = LocalBroadcastManager.getInstance(this) und dann @ anruflbm.registerReceiver(localReceiver) hat auch keine meiner Sendungen empfangen.

Warum hat der LocalBroadcastManager keine meiner Sendungen empfangen?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage