Как использовать / найти , LocalBroadcastManager
как описано в Google Docs и службы вещания документ ?
Я пытался гуглить, но нет кода, с которого можно начать?
В документах говорится, что я должен использовать его, если я хочу делать внутреннюю трансляцию в процессе моего приложения, но я не знаю, где это искать.
Любая помощь / комментарий?
Обновление : я знаю, как использовать трансляции, но не знаю, как получить LocalBroadcastManager
доступ к моему проекту.
android
broadcastreceiver
waqaslam
источник
источник
LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver, new IntentFilter("custom-event-name"));
LocalBroadcastManager
был объявлен устаревшим Я заменил свою на библиотеку EventBus, которая намного лучше, IMO.Ответы:
Я все равно отвечу на это. На всякий случай, если это кому-то нужно.
ReceiverActivity.java
Действие, которое просматривает уведомления для названного события
"custom-event-name"
.SenderActivity.java
Второе действие, которое отправляет / передает уведомления.
С кодом выше, каждый раз, когда нажимается кнопка
R.id.button_send
, намерение транслируется и принимаетсяmMessageReceiver
вReceiverActivity
.Вывод отладки должен выглядеть следующим образом:
источник
onDestroy()
не гарантированно будет называться !!! Вы должны использоватьonPause()
(потому что толькоonPause()
гарантировано) иonResume()
(потому что это соответствуетonPause()
)onDestroy()
не проблема Случай, когда он не вызывается, - это когда приложение убивается, и не имеет значения, если вы не отмените регистрацию в этом случае, так как даже список зарегистрированных получателей не выживет.Я бы предпочел ответить всесторонне.
LocalbroadcastManager включен в Android 3.0 и выше, поэтому вы должны использовать библиотеку поддержки v4 для ранних выпусков. см инструкции здесь
Создать широковещательный приемник:
Зарегистрируйте получателя в разделе Возобновление деятельности, например:
отменить регистрацию получателя в onPause:
Теперь всякий раз, когда локальная широковещательная рассылка отправляется из активности приложений или службы, вызывается onReceive of onNotice :).
Изменить: Вы можете прочитать полное руководство здесь LocalBroadcastManager: передача сообщений внутри приложения
источник
LocalBroadcastManager.getInstance(getActivity()).registerReceiver(onNotice);
иLocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(onNotice);
onStop
потому что в Android API 24+ с «Multi-Window / Split-View» (включено по умолчанию в API 26+ affaicr) действие, с которым не взаимодействует, находится в состоянии паузы. Источник: developer.android.com/guide/topics/ui/…На конце получения:
Затем обработайте входящие данные о намерениях в onReceive.
В конце отправки:
источник
В Eclipse мне пришлось добавить библиотеку совместимости / поддержки , щелкнув правой кнопкой мыши по моему проекту и выбрав:
Как только он был добавлен, я смог использовать
LocalBroadcastManager
класс в своем коде.источник
localbroadcastmanager устарел, вместо этого используйте реализации наблюдаемого шаблона.
androidx.localbroadcastmanager
устарела в версии 1.1.0причина
LocalBroadcastManager
- шина событий всего приложения, охватывающая нарушения уровней в вашем приложении; любой компонент может прослушивать события от любого другого компонента. Он наследует ненужные ограничения варианта использования системы BroadcastManager; разработчики должны использовать Intent, даже если объекты живут только в одном процессе и никогда не покидают его. По этой же причине он не соответствует функциональности BroadcastManager.Это добавляет запутанный опыт разработчика.
замена
Вы можете заменить использование
LocalBroadcastManager
других реализаций наблюдаемого шаблона. В зависимости от вашего варианта использования, подходящими вариантами могут бытьLiveData
или реактивные потоки.Преимущество LiveData
Вы можете расширить
LiveData
объект, используя шаблон синглтона, чтобы обернуть системные службы, чтобы они могли быть использованы в вашем приложении. ВLiveData
объекте подключается к системной службе один раз, а затем любому наблюдателю , который нуждается ресурс может просто наблюдать заLiveData
объект.observe()
Метод передает фрагмент, который является экземпляромLifecycleOwner
, в качестве первого аргумента. Это означает, что этот наблюдатель привязан кLifecycle
объекту, связанному с владельцем, что означает:Если объект жизненного цикла не находится в активном состоянии, то наблюдатель не вызывается, даже если значение изменяется.
После уничтожения объекта жизненного цикла наблюдатель автоматически удаляется
Тот факт, что
LiveData
объекты учитывают жизненный цикл, означает, что вы можете делиться ими между несколькими действиями, фрагментами и службами.источник
Как изменить глобальную трансляцию на LocalBroadcast
1) Создать экземпляр
2) Для регистрации BroadcastReceiver
3) Для отправки широковещательного сообщения
4) Для отмены регистрации широковещательного сообщения
источник
Когда вы будете достаточно играть с LocalBroadcastReceiver, я предлагаю вам попробовать EventBus от Green Robot - вы обязательно поймете разницу и полезность этого по сравнению с LBR. Меньше кода, настраиваемый для потока получателя (UI / Bg), проверка доступности получателей, липкие события, события могут быть использованы для доставки данных и т. Д.
источник
Пример Activity и Сервиса, реализующего LocalBroadcastManager, можно найти в документации для разработчиков. . Я лично нашел это очень полезным.
РЕДАКТИРОВАТЬ: с тех пор ссылка была удалена с сайта, но данные следующие: https://github.com/carrot-garden/android_maven-android-plugin-samples/blob/master/support4demos/src/com/ пример / Android / supportv4 / содержание / LocalServiceBroadcaster.java
источник
источник
Объявление одного в вашем файле AndroidManifest.xml с тегом (также называется статическим)
Вы заметите, что заявленный широковещательный приемник имеет свойство exported = «true». Этот атрибут сообщает получателю, что он может принимать широковещательные сообщения вне области приложения.
2. Или динамически путем регистрации экземпляра с помощью registerReceiver (так называемый зарегистрированный контекст)
Существует три способа отправки широковещательных
сообщений. Метод sendOrderedBroadcast обеспечивает одновременную отправку широковещательных сообщений только одному получателю. Каждая широковещательная рассылка может, в свою очередь, передавать данные той, которая следует за ней, или останавливать распространение широковещательной передачи для следующих получателей.
SendBroadcast похож на метод, упомянутый выше, с одним отличием. Все широковещательные приемники получают сообщение и не зависят друг от друга.
Метод LocalBroadcastManager.sendBroadcast отправляет широковещательные сообщения только получателям, определенным в вашем приложении, и не выходит за рамки вашего приложения.
источник
мы также можем использовать интерфейс для того же, что и broadcastManger, здесь я делюсь кодом testd для broadcastManager, но по интерфейсу.
сначала создайте интерфейс вроде:
2-это первый класс, который нуждается в реализации
3-это второй класс, реализующий тот же интерфейс, чей метод вызывается автоматически
таким образом, при таком подходе мы можем использовать интерфейс, функционирующий так же, как broadcastManager.
источник