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?
- LocalBroadcastManager vs Context.registerReceiver (), Context.sendBroadcast (Intent) y Context.unregisterReceiver () son iguales?
- Activar y desactivar receptor de difusión en el botón de clic
- No se puede registrar el receptor dinámicamente
- Java.lang.InstantiationException: class no tiene constructor de argumento cero
- NEW_OUTGOING_CALL no se llama en el Samsung Galaxy S
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.
- ¿Dónde anular el registro de BroadcastReceiver (en un servicio)?
- Android: habilitar y servicios
- Recepción de llamadas entrantes no funciona (Android 4.1)
- El receptor de reinicio no funciona en los teléfonos xiaomi
- Transmisión de Android del servicio a la actividad
- ¿Hay alguna manera de recibir una notificación cuando el usuario apaga el dispositivo?
- ¿Puede BroadcastReceiver registrado en AndroidManifest recibir intenciones cuando se cancela el proceso de solicitud?
- El BroadcastReceiver para la intención ACTION_MEDIA_BUTTON se activa TWICE por clic en MediaButton
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.
-
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í
-
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 !"); } };
-
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.
-
UnRegister receptor en onPause:
protected void onPause() { super.onPause(); LocalBroadcastManager.getInstance(this).unregisterReceiver(onNotice); }
-
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.
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.
- Gravedad y layout_gravity en Android
- El emulador de Android no toma la entrada de teclado – Herramientas de SDK rev 20