Jak korzystać / lokalizować LocalBroadcastManager
zgodnie z opisem w Dokumentach Google i dokumencie transmisji usług ?
Próbowałem google go, ale nie ma kodu na początek?
Dokumenty mówią, że powinienem go użyć, jeśli chcę nadawać wewnętrznie w procesie mojej aplikacji, ale nie wiem, gdzie go szukać.
Jakaś pomoc / komentarz?
Aktualizacja : Wiem, jak korzystać z emisji, ale nie wiem, jak uzyskać LocalBroadcastManager
dostęp do mojego projektu.
android
broadcastreceiver
waqaslam
źródło
źródło
LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver, new IntentFilter("custom-event-name"));
LocalBroadcastManager
został wycofany. Mój zastąpiłem biblioteką EventBus, która jest o wiele ładniejsza, imo.Odpowiedzi:
I tak odpowiem. Na wypadek, gdyby ktoś tego potrzebował.
ReceiverActivity.java
Aktywność, która obserwuje powiadomienia o zdarzeniu o nazwie
"custom-event-name"
.SenderActivity.java
Drugie działanie, które wysyła / nadaje powiadomienia.
Z powyższego kodu, za każdym razem przycisk
R.id.button_send
zostanie kliknięty, zamiarem jest nadawany i odbierany jest przezmMessageReceiver
wReceiverActivity
.Dane wyjściowe debugowania powinny wyglądać następująco:
źródło
onDestroy()
nie ma gwarancji, że zadzwonisz !!! Musisz użyćonPause()
(ponieważ tylkoonPause()
jest to gwarantowane) ionResume()
(ponieważ to pasuje doonPause()
)onDestroy()
nie jest problemem. Przypadek, w którym nie jest wywoływany, to moment, w którym aplikacja została zabita, i nie ma znaczenia, że nie wyrejestrujesz się w tym przypadku, ponieważ nawet lista zarejestrowanych odbiorców nie przeżyje.Wolę odpowiedzieć kompleksowo.
LocalbroadcastManager zawarty w Androidzie 3.0 i nowszych wersjach, więc musisz używać biblioteki wsparcia v4 dla wczesnych wersji. zobacz instrukcje tutaj
Utwórz odbiornik radiowy:
Zarejestruj swój odbiornik w OnResume działalności, takiej jak:
wyrejestruj odbiornik włączony onPause:
Teraz za każdym razem, gdy nadawany jest program lokalny z aktywności lub usługi aplikacji, onReceive onNotice będzie wywoływany :).
Edycja: Możesz przeczytać cały samouczek tutaj LocalBroadcastManager: Przekazywanie komunikatów wewnątrz aplikacji
źródło
LocalBroadcastManager.getInstance(getActivity()).registerReceiver(onNotice);
i wyrejestruj za pomocąLocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(onNotice);
onStop
ponieważ w Android API 24+ z „Multi-Window / Split-View” (domyślnie włączony w aaicr API 26+) aktywność, z którą nie wchodzi się w interakcję, jest wstrzymana. Źródło: developer.android.com/guide/topics/ui/…Po zakończeniu odbioru:
Następnie obsługuj przychodzące dane zamiaru w onReceive.
Po zakończeniu wysyłania:
źródło
W Eclipse ostatecznie musiałem dodać bibliotekę kompatybilności / obsługi technicznej, klikając prawym przyciskiem myszy mój projekt i wybierając:
Po dodaniu mogłem użyć
LocalBroadcastManager
klasy w moim kodzie.źródło
Jak zmienić globalną transmisję na LocalBroadcast
1) Utwórz instancję
2) Do rejestracji BroadcastReceiver
3) Do wysyłania wiadomości rozgłoszeniowej
4) Za wyrejestrowanie wiadomości rozgłoszeniowej
źródło
localbroadcastmanager jest przestarzały, zamiast tego użyj implementacji obserwowalnego wzorca.
androidx.localbroadcastmanager
jest przestarzałe w wersji 1.1.0Powód
LocalBroadcastManager
jest aplikacyjną szyną zdarzeń i obejmuje naruszenia aplikacji w Twojej aplikacji; dowolny komponent może nasłuchiwać zdarzeń z dowolnego innego komponentu. Dziedziczy niepotrzebne ograniczenia przypadków użycia systemu BroadcastManager; programiści muszą korzystać z Intent, nawet jeśli obiekty działają tylko w jednym procesie i nigdy go nie opuszczają. Z tego samego powodu nie jest zgodny z funkcją BroadcastManager pod względem funkcji.To wszystko powoduje zamieszanie programistów.
Zastąpienie
Możesz zastąpić użycie
LocalBroadcastManager
innymi implementacjami obserwowalnego wzorca. W zależności od przypadku zastosowania odpowiednimi opcjami mogą byćLiveData
lub strumienie reaktywne.Zaleta LiveData
Możesz rozszerzyć
LiveData
obiekt za pomocą wzorca singleton, aby zawinąć usługi systemowe, aby można je było udostępnić w aplikacji. NaLiveData
łączy sprzeciw wobec usługi systemowej jednokrotnie, a następnie każdego obserwatora, który potrzebuje zasobu może tylko obserwowaćLiveData
obiekt.observe()
Sposób przechodzi do fragmentu, który jest przykłademLifecycleOwner
, jak pierwszy argument. Oznacza to, że ten obserwator jest powiązany zLifecycle
obiektem powiązanym z właścicielem, co oznacza:Jeśli obiekt Lifecycle nie jest w stanie aktywnym, obserwator nie jest wywoływany, nawet jeśli wartość się zmienia.
Po zniszczeniu obiektu Lifecycle obserwator jest automatycznie usuwany
Fakt, że
LiveData
obiekty uwzględniają cykl życia, oznacza, że można je udostępniać między wieloma działaniami, fragmentami i usługami.źródło
Kiedy będziesz grać wystarczająco dużo z LocalBroadcastReceiver, zasugeruję Ci wypróbowanie EventBus Green Robot - na pewno zauważysz różnicę i użyteczność tego w porównaniu z LBR. Mniej kodu, możliwość dostosowania do wątku odbiorcy (UI / Bg), sprawdzania dostępności odbiorników, zdarzeń trwałych, zdarzeń może służyć jako dostawa danych itp.
źródło
Przykład działania i usługi implementujących LocalBroadcastManager można znaleźć w dokumentacji dla programistów . Osobiście uważam to za bardzo przydatne.
EDYCJA: Od tego czasu link został usunięty z witryny, ale dane są następujące: https://github.com/carrot-garden/android_maven-android-plugin-samples/blob/master/support4demos/src/com/ przykład / android / supportv4 / content / LocalServiceBroadcaster.java
źródło
źródło
Deklarując jeden w pliku AndroidManifest.xml za pomocą znacznika (zwanego także statycznym)
Zauważysz, że zadeklarowany powyżej odbiornik radiowy ma właściwość exported = „true”. Ten atrybut informuje odbiorcę, że może odbierać transmisje spoza zakresu aplikacji.
2. Lub dynamicznie, rejestrując instancję w registerReceiver (tak zwany kontekst zarejestrowany)
Istnieją trzy sposoby wysyłania transmisji:
Metoda sendOrdersBroadcast zapewnia wysyłanie transmisji tylko do jednego odbiornika na raz. Każda transmisja może z kolei przekazywać dane do kolejnej po niej lub zatrzymać propagację transmisji do następnych odbiorników.
SendBroadcast jest podobny do metody wspomnianej powyżej, z jedną różnicą. Wszystkie odbiorniki radiowe odbierają wiadomość i nie są od siebie zależne.
Metoda LocalBroadcastManager.sendBroadcast wysyła tylko transmisje do odbiorników zdefiniowanych w aplikacji i nie wykracza poza zakres aplikacji.
źródło
możemy również użyć interfejsu dla samego jak broadcastManger. Udostępniam kod testd dla broadcastManager, ale według interfejsu.
najpierw utwórz interfejs taki jak:
2 - jest to pierwsza klasa, która wymaga implementacji
3-tutaj jest druga klasa, która implementuje ten sam interfejs, którego metoda wywołuje automatycznie
dzięki temu podejściu możemy użyć interfejsu działającego tak samo jak broadcastManager.
źródło