¿Cómo usar / localizar LocalBroadcastManager
como se describe en Google Docs y Service Broadcast Doc ?
Intenté buscarlo en Google, pero ¿no hay un código disponible para comenzar?
Los documentos dicen que debería usarlo si quiero hacer una transmisió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 transmisiones pero no sé cómo estar LocalBroadcastManager
disponible en mi proyecto.
android
broadcastreceiver
waqaslam
fuente
fuente
LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver, new IntentFilter("custom-event-name"));
LocalBroadcastManager
ha quedado en desuso Reemplacé la mía con la biblioteca EventBus, que es mucho mejor, en mi opinión.Respuestas:
Contestaré esto de todos modos. Por si acaso alguien lo necesita.
ReceiverActivity.java
Una actividad que busca notificaciones para el evento nombrado
"custom-event-name"
.SenderActivity.java
La segunda actividad que envía / difunde notificaciones.
Con el código anterior, cada vez que
R.id.button_send
se hace clic en el botón , se transmite una Intención y se recibemMessageReceiver
enReceiverActivity
.La salida de depuración debería verse así:
fuente
onDestroy()
no se garantiza que se llame !!! Debe usaronPause()
(porque soloonPause()
está garantizado) yonResume()
(porque es el partido paraonPause()
)onDestroy()
no es problema. El caso en el que no se llama es cuando se mata la aplicación, y no importa si no cancela el registro en ese caso, ya que ni siquiera la lista de receptores registrados sobrevive.Prefiero responder de manera integral.
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í
Crear un receptor de difusión:
Registre su receptor en onResume de actividad como:
cancelar el registro del receptor en onPause:
Ahora, cada vez que se envía una transmisión local desde la actividad o el servicio de las aplicaciones, se llamará a onReceive of onNotice :).
Editar: puede leer el tutorial completo aquí LocalBroadcastManager: pasar el mensaje de la aplicación Intra
fuente
LocalBroadcastManager.getInstance(getActivity()).registerReceiver(onNotice);
yLocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(onNotice);
onStop
porque en Android API 24+ con "Multi-Window / Split-View" (habilitado por defecto en API 26+ affaicr), la actividad con la que no se interactúa está en estado de pausa. Fuente: developer.android.com/guide/topics/ui/…En el extremo receptor:
Luego maneje los datos de intención entrantes en onReceive.
Al finalizar el envío:
fuente
En Eclipse, eventualmente tuve que agregar la Biblioteca de compatibilidad / soporte haciendo clic derecho en mi proyecto y seleccionando:
Una vez que se agregó, pude usar
LocalBroadcastManager
class en mi código.fuente
Cómo cambiar su transmisión global a LocalBroadcast
1) Crear instancia
2) Para registrar BroadcastReceiver
3) Para enviar mensajes de difusión
4) Para cancelar el registro del mensaje de difusión
fuente
localbroadcastmanager está en desuso, utilice implementaciones del patrón observable en su lugar.
androidx.localbroadcastmanager
está en desuso en la versión 1.1.0Razón
LocalBroadcastManager
es un bus de eventos para toda la aplicación y abarca las infracciones de capa en su aplicación; cualquier componente puede escuchar eventos de cualquier otro componente. Hereda limitaciones innecesarias de casos de uso del sistema BroadcastManager; los desarrolladores tienen que usar Intent aunque los objetos vivan en un solo proceso y nunca lo abandonen. Por esta misma razón, no sigue a BroadcastManager en cuanto a funciones.Estos se suman a una experiencia confusa del desarrollador.
Reemplazo
Puede reemplazar el uso de
LocalBroadcastManager
con otras implementaciones del patrón observable. Dependiendo de su caso de uso, las opciones adecuadas pueden serLiveData
o flujos reactivos.Ventaja de LiveData
Puede extender un
LiveData
objeto usando el patrón singleton para ajustar los servicios del sistema para que puedan compartirse en su aplicación. ElLiveData
objeto se conecta al servicio del sistema una vez, y luego cualquier observador que necesite el recurso puede simplemente observar elLiveData
objeto.El
observe()
método pasa el fragmento, que es una instancia deLifecycleOwner
, como primer argumento. Hacerlo indica que este observador está vinculado alLifecycle
objeto asociado con el propietario, lo que significa:Si el objeto del ciclo de vida no está en un estado activo, no se llama al observador incluso si el valor cambia.
Después de que se destruye el objeto del ciclo de vida, el observador se elimina automáticamente
El hecho de que los
LiveData
objetos sean conscientes del ciclo de vida significa que puede compartirlos entre múltiples actividades, fragmentos y servicios.fuente
Cuando juegues lo suficiente con LocalBroadcastReceiver, te sugiero que pruebes el 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 receptor (UI / Bg), verificando la disponibilidad de los receptores, eventos fijos, eventos podrían usarse como entrega de datos, etc.
fuente
Un ejemplo de una Actividad y un Servicio que implementa un LocalBroadcastManager se puede encontrar en los documentos del desarrollador . Personalmente lo encontré muy útil.
EDITAR: 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
fuente
fuente
Al declarar uno en su archivo AndroidManifest.xml con la etiqueta (también llamada estática)
Notará que el receptor de difusión declarado anteriormente tiene una propiedad de exported = "true". Este atributo le dice al receptor que puede recibir transmisiones desde fuera del alcance de la aplicación.
2. O dinámicamente registrando una instancia con registerReceiver (lo que se conoce como contexto registrado)
Hay tres formas de enviar transmisiones:
El método sendOrderedBroadcast se asegura de enviar transmisiones a un solo receptor a la vez. A su vez, cada transmisión puede transmitir datos a la siguiente o detener la propagación de la transmisión a los receptores que siguen.
SendBroadcast es similar al método mencionado anteriormente, con una diferencia. Todos los receptores de difusión reciben el mensaje y no dependen unos de otros.
El método LocalBroadcastManager.sendBroadcast solo envía transmisiones a receptores definidos dentro de su aplicación y no excede el alcance de su aplicación.
fuente
También podemos usar la interfaz para broadcastManger aquí. Estoy compartiendo el código probado para broadcastManager pero por interfaz.
primero crea una interfaz como:
2-esta es la primera clase que necesita implementación
3-aquí está la segunda clase que implementa la misma interfaz cuyo método llama automáticamente
por este enfoque podemos usar la interfaz que funciona igual que broadcastManager.
fuente