Cómo usar LocalBroadcastManager?

¿Puede alguien decirme cómo usar / localizar LocalBroadcastManager como se describe en google docs y service broadcast doc ?

He intentado google, pero no hay código disponible para empezar?

Los documentos dicen que debo usarlo si quiero hacer la difusión interna con el proceso de mi aplicación, pero no sé dónde buscar esto

¿Alguna ayuda / comentario?

Actualización : Sé cómo utilizar Broadcasts pero no sé cómo obtener LocalBroadcastManager disponible en mi proyecto.

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

ReceptorActividad.java

Una actividad que busca las notificaciones del evento denominadas "custom-event-name" nombre "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 / transmite 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 se R.id.button_send un Intent y se recibe por mMessageReceiver en ReceiverActivity .

La salida de depuración debería tener este aspecto:

 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 de manera comprensiva.

  1. LocalbroadcastManager incluido en android 3.0 y superior por lo que tiene que utilizar la biblioteca de soporte v4 para las primeras versiones. Vea las 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 onResume de actividad 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 un broadcast local de la actividad o servicio de las aplicaciones, onReceive of onNotice se llamará :).

Edit: Usted puede leer el tutorial completo aquí LocalBroadcastManager: Intra pasar el mensaje de la aplicación

En Eclipse, al final tuve que agregar la compatibilidad / soporte de biblioteca haciendo clic derecho en mi proyecto y seleccionando:

Herramientas de Android -> Agregar biblioteca de soporte

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


Biblioteca de compatibilidad de Android

En Recepción final:

  • Primer registro LocalBroadcast Receiver
  • Luego, maneje los datos de intenciones entrantes en onReceive.

      @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); LocalBroadcastManager.getInstance(context).registerReceiver(mMessageReceiver, new IntentFilter("Your_IntentFilter_string")); } public BroadcastReceiver mMessageReceiver = 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 extremo de envío:

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

Cuando juegue lo suficiente con LocalBroadcastReceiver, le sugeriré que pruebe el EventBus de Green Robot – definitivamente se dará cuenta de la diferencia y utilidad de la misma en comparación con LBR. Menos código, personalizable sobre el hilo del receptor (UI / Bg), comprobación de la disponibilidad de los receptores, eventos pegajosos, eventos podrían utilizarse como entrega de datos, etc.

Un ejemplo de una actividad y un servicio que implementa un LocalBroadcastManager se puede encontrar en los documentos del desarrollador. Yo personalmente me pareció muy útil.

EDIT: Desde entonces, el enlace se ha eliminado del sitio, pero los datos son los siguientes: https://github.com/carrot-garden/android_maven-android-plugin-samples/blob/master/support4demos/src/com/ Ejemplo / android / supportv4 / content / LocalServiceBroadcaster.java

También podemos utilizar la interfaz para lo mismo que broadcastManger aquí estoy compartiendo el código testd 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); } 

enter code here }

3-aquí es 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 que con este enfoque podemos utilizar la interfaz funcionando igual que broadcastManager.

  • ¿Cuál es el valor entero que da prioridad a un receptor de difusión?
  • Android capturando el volumen hacia arriba / hacia abajo presiona teclas en receptor de difusión?
  • Receptor de radiodifusión en un fragmento
  • Detectar la desconexión desde un punto de acceso WiFi
  • ¿Cómo puedo mostrar un diálogo desde un receptor de difusión de Android?
  • Crear notificación con BroadcastReceiver
  • ¿Cómo identifica * qué * dispositivo bluetooth causa una emisión ACTION_ACL_CONNECTED?
  • Cómo cancelar el registro de BroadcastReceiver
  • La detección de cambios de estado de la red Android tarda tiempo
  • ANR Difusión de Intención {act = android.intent.action.SCREEN_OFF flg = 0x50000010}
  • Anular el registro de Android Broadcast Receiver en onReceive lanza "Receptor no registrado"
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.