Как использовать LocalBroadcastManager?

Как использовать / локализовать LocalBroadcastManager как описано в документах google и в документе Service Broadcast ?

Я попытался это сделать, но для начала нет кода.

В документах говорится, что я должен использовать его, если я хочу делать трансляцию внутри себя в процессе моего приложения, но я не знаю, где искать это.

Любая помощь / комментарий?

Обновление : я знаю, как использовать трансляции, но не знаю, как получить LocalBroadcastManager в моем проекте.

8 Solutions collect form web for “Как использовать LocalBroadcastManager?”

Я все равно отвечу. На всякий случай кому-то это нужно.

ReceiverActivity.java

Действие, которое отслеживает уведомления для события с именем "custom-event-name" .

 @Override public void onCreate(Bundle savedInstanceState) { ... // Register to receive messages. // We are registering an observer (mMessageReceiver) to receive Intents // with actions named "custom-event-name". LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver, new IntentFilter("custom-event-name")); } // Our handler for received Intents. This will be called whenever an Intent // with an action named "custom-event-name" is broadcasted. private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { // Get extra data included in the Intent String message = intent.getStringExtra("message"); Log.d("receiver", "Got message: " + message); } }; @Override protected void onDestroy() { // Unregister since the activity is about to be closed. LocalBroadcastManager.getInstance(this).unregisterReceiver(mMessageReceiver); super.onDestroy(); } 

SenderActivity.java

Второе действие, которое отправляет / передает уведомления.

 @Override public void onCreate(Bundle savedInstanceState) { ... // Every time a button is clicked, we want to broadcast a notification. findViewById(R.id.button_send).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { sendMessage(); } }); } // Send an Intent with an action named "custom-event-name". The Intent sent should // be received by the ReceiverActivity. private void sendMessage() { Log.d("sender", "Broadcasting message"); Intent intent = new Intent("custom-event-name"); // You can also include some extra data. intent.putExtra("message", "This is my message!"); LocalBroadcastManager.getInstance(this).sendBroadcast(intent); } 

С помощью кода выше, каждый раз, когда нажимается кнопка R.id.button_send , Intent транслируется и принимается mMessageReceiver в ReceiverActivity .

Результат отладки должен выглядеть следующим образом:

 01-16 10:35:42.413: D/sender(356): Broadcasting message 01-16 10:35:42.421: D/receiver(356): Got message: This is my message! 

Я хотел бы ответить всесторонне.

  1. LocalbroadcastManager включен в android 3.0 и выше, поэтому вам нужно использовать библиотеку поддержки v4 для ранних выпусков. см. инструкции здесь

  2. Создайте широковещательный приемник:

     private BroadcastReceiver onNotice= new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { // intent can contain anydata Log.d("sohail","onReceive called"); tv.setText("Broadcast received !"); } }; 
  3. Зарегистрируйте свой ресивер в onResume активности, например:

     protected void onResume() { super.onResume(); IntentFilter iff= new IntentFilter(MyIntentService.ACTION); LocalBroadcastManager.getInstance(this).registerReceiver(onNotice, iff); } //MyIntentService.ACTION is just a public static string defined in MyIntentService. 
  4. unRegister приемник в onPause:

     protected void onPause() { super.onPause(); LocalBroadcastManager.getInstance(this).unregisterReceiver(onNotice); } 
  5. Теперь, когда локальная передача отправляется из активности или службы приложений, будет вызываться onReceive onNotice :).

Редактировать: здесь вы можете прочитать полный учебник. LocalBroadcastManager: передача сообщения приложения Intra

В Eclipse мне пришлось добавить библиотеку совместимости / поддержки , щелкнув правой кнопкой мыши мой проект и выбрав:

Инструменты Android -> Добавить библиотеку поддержки

Как только он был добавлен, я смог использовать class LocalBroadcastManager в своем коде.


Библиотека совместимости Android

Входящий конец:

  • Первый регистр LocalBroadcast Receiver
  • Затем обрабатывайте входящие данные о намерениях в onReceive.

      @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(this); lbm.registerReceiver(receiver, new IntentFilter("filter_string")); } public BroadcastReceiver receiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if (intent != null) { String str = intent.getStringExtra("key"); // get all your data from intent and do what you want } } }; 

По отправке:

  Intent intent = new Intent("filter_string"); intent.putExtra("key", "My Data"); // put your all data using put extra LocalBroadcastManager.getInstance(this).sendBroadcast(intent); 

Как изменить глобальную трансляцию на LocalBroadcast

1) Создать экземпляр

 LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(this); 

2) Для регистрации BroadcastReceiver

замещать

 registerReceiver(new YourReceiver(),new IntentFilter("YourAction")); 

С

 localBroadcastManager.registerReceiver(new YourReceiver(),new IntentFilter("YourAction")); 

3) Для отправки широковещательного сообщения

замещать

 sendBroadcast(intent); 

С

 localBroadcastManager.sendBroadcast(intent); 

4) Для незарегистрированного широковещательного сообщения

замещать

 unregisterReceiver(mybroadcast); 

С

 localBroadcastManager.unregisterReceiver(mybroadcast); 

Когда вы будете играть достаточно с LocalBroadcastReceiver, я предлагаю вам попробовать EventBus от Green Robot, вы определенно поймете разницу и полезность этого по сравнению с LBR. Меньший код, настраиваемый по streamу приемника (UI / Bg), проверка доступности приемников, липкие события, события могут использоваться как передача данных и т. Д.

Пример Activity и службы, реализующей LocalBroadcastManager, можно найти в документах разработчика. Я лично нашел его очень полезным.

EDIT: ссылка с тех пор была удалена с сайта, но данные следующие: https://github.com/carrot-garden/android_maven-android-plugin-samples/blob/master/support4demos/src/com/ пример / Android / supportv4 / содержание / LocalServiceBroadcaster.java

мы также можем использовать интерфейс для того же самого, что и для broadcastManger. Здесь я использую код testd для broadcastManager, но по интерфейсу.

сначала создайте интерфейс:

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

2 – это первый class, который нуждается в реализации

 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 – вот второй class, реализующий тот же интерфейс, метод вызова которого автоматически

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

поэтому с помощью этого подхода мы можем использовать интерфейс, функционирующий так же, как broadcastManager.

Interesting Posts

В чем разница между перфорацией отверстий UDP и UPnP?

Связывание ключа tmux с несколькими командами

Пиксельный текст с помощью Excel Camera Tool

Как сделать «Файлы для хранения без сжатия» в 7-zip?

Почему у моего VPS заканчивается память?

Синхронизация подкастов с Rhythmbox на iPod

Право на установку OEM-лицензии Windows 7 в VMWare Fusion?

Является ли «NT AUTHORITY \ SYSTEM» пользователем или группой?

Скопируйте и вставьте без отслеживаемых изменений в MS Office 2013

Не удается сохранить данные или настройки в VirtualBox

Как выставить 2 папки в качестве одного сетевого ресурса в Windows 7?

Сетевые адаптеры Powerline и расширитель диапазона беспроводной сети

Есть ли что-то вроде «универсального приемника 2,4 ГГц» для беспроводных периферийных устройств?

Проверьте, является ли текст ячейки Excel числовым, используя только формулу

Требуется ли VirtualBox / CentOs для правильной работы двух адаптеров?

Давайте будем гением компьютера.