receivers android broadcastreceiver

android - receivers - ¿Cómo usar LocalBroadcastManager?



broadcast receiver android (8)

Cómo cambiar su transmisión global a LocalBroadcast

1) Crear instancia

LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(this);

2) Para el registro de BroadcastReceiver

Reemplazar

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

Con

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

3) Para enviar mensaje de difusión.

Reemplazar

sendBroadcast(intent);

Con

localBroadcastManager.sendBroadcast(intent);

4) Para anular el registro de mensajes de difusión.

Reemplazar

unregisterReceiver(mybroadcast);

Con

localBroadcastManager.unregisterReceiver(mybroadcast);

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

Traté de buscarlo en Google, pero no hay ningún código disponible para empezar.

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

¿Alguna ayuda / comentario?

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


Cuando juegues lo suficiente con LocalBroadcastReceiver, te sugeriré que pruebes el EventBus de Green Robot; definitivamente te darás cuenta de la diferencia y la utilidad en comparación con LBR. Menos código, personalizable sobre el hilo del receptor (UI / Bg), verificando la disponibilidad de los receptores, eventos pegajosos, eventos podrían usarse como entrega de datos, etc.


En Eclipse, eventualmente tuve que agregar Compatibility / Support Library haciendo clic derecho en mi proyecto y seleccionando:

Herramientas de Android -> Añadir biblioteca de soporte

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


Prefiero responder de manera integral.

  1. LocalbroadcastManager incluido en Android 3.0 y superior, por lo que tiene que usar la biblioteca de soporte v4 para las primeras versiones. vea las instrucciones here

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

    protected void onPause() { super.onPause(); LocalBroadcastManager.getInstance(this).unregisterReceiver(onNotice); }

  5. Ahora, cada vez que se envía una difusión local desde la actividad o el servicio de las aplicaciones, se llamará onReceive of onNotice :).

Editar: Puede leer el tutorial completo aquí LocalBroadcastManager: Paso de mensajes de aplicación Intra


También podemos usar la interfaz para el mismo que broadcastManger. Estoy compartiendo el código testd para broadcastManager pero por interfaz.

Primero haz 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 se 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.



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

ReceiverActivity.java

Una actividad que vigila las notificaciones del evento denominado "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 , se emite un Intent y se recibe por 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!


Al final de la recepción:

  • Primer registro LocalBroadcast Receiver
  • Luego maneja los datos de intención entrantes 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 } } };

Al finalizar el 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);