Как использовать LocalBroadcastManager?
Как использовать / локализовать LocalBroadcastManager
как описано в документах google и в документе Service Broadcast ?
Я попытался это сделать, но для начала нет кода.
В документах говорится, что я должен использовать его, если я хочу делать трансляцию внутри себя в процессе моего приложения, но я не знаю, где искать это.
- Как использовать широковещательный приемник в разных приложениях на Android?
- Как отменить регистрацию BroadcastReceiver
- android.intent.action.SCREEN_ON не работает как фильтр намерения приемника
- Приемник как внутренний class в Android
- Не удается определить, когда на исходящий вызов отвечает Android
Любая помощь / комментарий?
Обновление : я знаю, как использовать трансляции, но не знаю, как получить LocalBroadcastManager
в моем проекте.
- Android - как отменить регистрацию получателя, созданного в манифесте?
- Android BroadcastReceiver при запуске - продолжайте работать, когда Activity находится в фоновом режиме
- Android BroadcastReceiver в действии
- Есть ли способ получить уведомление, когда пользователь отключает устройство?
- Включение и отключение широковещательного приемника
- Как обновить пользовательский интерфейс в BroadcastReceiver
- Когда регистрировать / отменять регистрацию широковещательных приемников, созданных в ходе действия?
- Программно зарегистрировать широковещательный приемник
Я все равно отвечу. На всякий случай кому-то это нужно.
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!
Я хотел бы ответить всесторонне.
-
LocalbroadcastManager включен в android 3.0 и выше, поэтому вам нужно использовать библиотеку поддержки v4 для ранних выпусков. см. инструкции здесь
-
Создайте широковещательный приемник:
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 !"); } };
-
Зарегистрируйте свой ресивер в 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.
-
unRegister приемник в onPause:
protected void onPause() { super.onPause(); LocalBroadcastManager.getInstance(this).unregisterReceiver(onNotice); }
-
Теперь, когда локальная передача отправляется из активности или службы приложений, будет вызываться onReceive onNotice :).
Редактировать: здесь вы можете прочитать полный учебник. LocalBroadcastManager: передача сообщения приложения Intra
В Eclipse мне пришлось добавить библиотеку совместимости / поддержки , щелкнув правой кнопкой мыши мой проект и выбрав:
Инструменты Android -> Добавить библиотеку поддержки
Как только он был добавлен, я смог использовать class LocalBroadcastManager
в своем коде.
Входящий конец:
- Первый регистр 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.