¿Cómo usar LocalBroadcastManager?

¿Cómo usar / ubicar LocalBroadcastManager como se describe en google docs y Service broadcast doc ?

Intenté googlearlo, ¿pero no hay ningún código disponible para comenzar?

Los documentos dicen que debería usarlo si quiero transmitirlo internamente en el proceso de mi aplicación, pero no sé dónde buscarlo.

Cualquier ayuda / comentario?

Actualización : Sé cómo usar Transmisiones, pero no sé cómo conseguir LocalBroadcastManager disponible en mi proyecto.

Voy a responder esto de todos modos. Por si alguien lo necesita.

ReceiverActivity.java

Una actividad que busca notificaciones para el evento llamado "custom-event-name" nombre de evento "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

La segunda actividad que envía / difunde notificaciones.

 @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); } 

Con el código anterior, cada vez que se hace clic en el botón R.id.button_send , Intent se transmite y lo recibe mMessageReceiver en ReceiverActivity .

La salida de depuración debería verse así:

 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! 

Prefiero responder ampliamente.

  1. LocalbroadcastManager incluido en Android 3.0 y superior, por lo que debe usar la biblioteca de soporte v4 para las versiones anteriores. ver instrucciones aquí

  2. Crear un receptor de difusión:

     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. Registre su receptor en el registro de actividades como:

     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 receptor en onPause:

     protected void onPause() { super.onPause(); LocalBroadcastManager.getInstance(this).unregisterReceiver(onNotice); } 
  5. Ahora, cada vez que se envía una emisión local desde la actividad o servicio de las aplicaciones, se llamará a onReceive of onNotice :).

Editar: Puede leer el tutorial completo aquí LocalBroadcastManager: mensaje de aplicación intra que pasa

En Eclipse, finalmente tuve que agregar Compatibilidad / Biblioteca de soporte haciendo clic derecho en mi proyecto y seleccionando:

Herramientas de Android -> Agregar biblioteca de soporte

Una vez que se agregó, pude usar la clase LocalBroadcastManager en mi código.


Biblioteca de compatibilidad de Android

En el extremo receptor:

  • Primero regístrese Receptor de difusión local
  • Luego, maneje los datos de intención entrante en 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 } } }; 

En el fin de envío:

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

Cómo cambiar tu transmisión global a LocalBroadcast

1) Crear instancia

 LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(this); 

2) Para registrar BroadcastReceiver

Reemplazar

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

Con

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

3) Para enviar mensajes de difusión

Reemplazar

 sendBroadcast(intent); 

Con

 localBroadcastManager.sendBroadcast(intent); 

4) Para anular el registro del mensaje transmitido

Reemplazar

 unregisterReceiver(mybroadcast); 

Con

 localBroadcastManager.unregisterReceiver(mybroadcast); 

Cuando juegues lo suficiente con LocalBroadcastReceiver, te sugiero que pruebes EventBus de Green Robot, definitivamente te darás cuenta de la diferencia y la utilidad de este en comparación con LBR. Menos código, personalizable sobre el hilo del destinatario (UI / Bg), comprobación de la disponibilidad de los receptores, eventos adhesivos, eventos podrían ser utilizados como entrega de datos, etc.

Un ejemplo de una Actividad y un Servicio implementando un LocalBroadcastManager se puede encontrar en los documentos del desarrollador. Personalmente lo encontré muy útil.

EDITAR: El enlace se eliminó del sitio desde entonces, pero los datos son los siguientes: https://github.com/carrot-garden/android_maven-android-plugin-samples/blob/master/support4demos/src/com/ example / android / supportv4 / content / LocalServiceBroadcaster.java

también podemos usar la interfaz para lo mismo que broadcastManger. Aquí estoy compartiendo el código de prueba para broadcastManager pero por interfaz.

Primero haga una interfaz como:

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

2: esta es la primera clase que necesita implementación

 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-aquí está la segunda clase que implementa la misma interfaz cuyo método llama automáticamente

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

por lo tanto, con este enfoque podemos usar la interfaz que funciona igual que broadcastManager.