480 Stimmen

Wie verwendet man LocalBroadcastManager?

Verwendung/Standort LocalBroadcastManager wie beschrieben in Google-Dokumente y Dienstsendung doc ?

Ich habe versucht, es zu googeln, aber es gibt keinen Code, mit dem man anfangen könnte?

In den Dokumenten steht, dass ich es verwenden soll, wenn ich die Übertragung intern in den Prozess meiner Anwendung einbinden möchte, aber ich weiß nicht, wo ich danach suchen soll.

Gibt es Hilfe/Kommentar?

更新情報 : Ich weiß, wie man Broadcasts benutzt, aber ich weiß nicht, wie man LocalBroadcastManager in meinem Projekt zur Verfügung.

0 Stimmen

Waqas, haben Sie den Empfänger im Verzeichnis registriert? Wenn ja, lassen Sie mich bitte wissen, wie?

2 Stimmen

Ich glaube nicht, dass Sie einen Empfänger für solche Sendungen im Manifest registrieren müssen, denn wenn Sie das tun, wird dieser Empfänger auch globale Sendungen empfangen.

3 Stimmen

Wahr. Das bedeutet, dass ich den Code wie in der folgenden Antwort beschrieben eingeben muss; LocalBroadcastManager.getInstance(this).registerReceiver(mMe‌​ssageReceiver, new IntentFilter("custom-event-name"));

0voto

Seroj Grigoryan Punkte 149

Indem Sie eine in Ihrer AndroidManifest.xml-Datei mit dem Tag (auch static genannt) deklarieren

<receiver android:name=".YourBrodcastReceiverClass"  android:exported="true">
<intent-filter>
    <!-- The actions you wish to listen to, below is an example -->
    <action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>

Sie werden feststellen, dass der oben deklarierte Broadcast-Empfänger die Eigenschaft exported="true" hat. Dieses Attribut teilt dem Empfänger mit, dass er Broadcasts von außerhalb des Anwendungsbereichs empfangen kann.
2. Oder dynamisch, indem eine Instanz mit registerReceiver registriert wird (was als kontextregistriert bezeichnet wird)

public abstract Intent registerReceiver (BroadcastReceiver receiver, 
            IntentFilter filter);

public void onReceive(Context context, Intent intent) {
//Implement your logic here
}

Es gibt drei Möglichkeiten, Rundsendungen zu senden:
Die sendOrderedBroadcast-Methode stellt sicher, dass Broadcasts jeweils nur an einen Empfänger gesendet werden. Jeder Broadcast kann wiederum Daten an den nachfolgenden weitergeben oder die Weitergabe des Broadcasts an die nachfolgenden Empfänger stoppen.
Die sendBroadcast-Methode ähnelt der oben erwähnten Methode, mit einem Unterschied. Alle Broadcast-Empfänger erhalten die Nachricht und sind nicht voneinander abhängig.
Die Methode LocalBroadcastManager.sendBroadcast sendet nur Broadcasts an Empfänger, die innerhalb Ihrer Anwendung definiert sind, und überschreitet nicht den Rahmen Ihrer Anwendung.

0voto

Krešimir Prcela Punkte 4031

Ich bin ein iOS-Entwickler und habe eine Lösung ähnlich wie NotificationCenter entwickelt:

object NotificationCenter {
    var observers: MutableMap<String, MutableList<NotificationObserver>> = mutableMapOf()

    fun addObserver(observer: NotificationObserver, notificationName: NotificationName) {
        var os = observers[notificationName.value]
        if (os == null) {
            os = mutableListOf<NotificationObserver>()
            observers[notificationName.value] = os
        }
        os.add(observer)
    }

    fun removeObserver(observer: NotificationObserver, notificationName: NotificationName) {
        val os = observers[notificationName.value]
        if (os != null) {
            os.remove(observer)
        }
    }

    fun removeObserver(observer:NotificationObserver) {
        observers.forEach { name, mutableList ->
            if (mutableList.contains(observer)) {
                mutableList.remove(observer)
            }
        }
    }

    fun postNotification(notificationName: NotificationName, obj: Any?) {
        val os = observers[notificationName.value]
        if (os != null) {
            os.forEach {observer ->
                observer.onNotification(notificationName,obj)
            }
        }
    }
}

interface NotificationObserver {
    fun onNotification(name: NotificationName,obj:Any?)
}

enum class NotificationName(val value: String) {
    onPlayerStatReceived("on player stat received"),
    ...
}

Einige Klassen, die eine Benachrichtigung beobachten wollen, müssen dem Beobachterprotokoll entsprechen:

class MainActivity : AppCompatActivity(), NotificationObserver {
    override fun onCreate(savedInstanceState: Bundle?) {
        ...
        NotificationCenter.addObserver(this,NotificationName.onPlayerStatReceived)
    }
    override fun onDestroy() {
        ...
        super.onDestroy()
        NotificationCenter.removeObserver(this)
    }

    ...
    override fun onNotification(name: NotificationName, obj: Any?) {
        when (name) {
            NotificationName.onPlayerStatReceived -> {
                Log.d(tag, "onPlayerStatReceived")
            }
            else -> Log.e(tag, "Notification not handled")
        }
    }

Schließlich sollten Sie die Beobachter benachrichtigen:

NotificationCenter.postNotification(NotificationName.onPlayerStatReceived,null)

-4voto

padmender singh Punkte 31

Wir können auch Schnittstelle für gleiche als broadcastManger hier ich bin den testd Code für broadcastManager aber durch Schnittstelle teilen.

zuerst eine Schnittstelle erstellen wie:

public interface MyInterface {
     void GetName(String name);
}

2 - dies ist die erste Klasse, die implementiert werden muss

public class First implements MyInterface{

    MyInterface interfc;    
    public static void main(String[] args) {
      First f=new First();      
      Second s=new Second();
      f.initIterface(s);
      f.GetName("Paddy");
  }
  private void initIterface(MyInterface interfc){
    this.interfc=interfc;
  }
  public void GetName(String name) {
    System.out.println("first "+name);
    interfc.GetName(name);  
  }
}

3-Hier ist die zweite Klasse, die die gleiche Schnittstelle implementiert, deren Methodenaufruf automatisch

public class Second implements MyInterface{
   public void GetName(String name) {
     System.out.println("Second"+name);
   }
}

Auf diese Weise können wir die Schnittstelle verwenden, die genauso funktioniert wie broadcastManager.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X