Guía de Android: Broadcast Receiver | Por Sergio Morality | Abril de 2022
En este artículo, discutiré el componente BroadcastReceiver y discutiré todas las posibilidades de esta clase.
primero.. lista! ⚡
⬜️ Crea una clase de receptor de transmisión.
⬜️ Declararlo en el archivo de manifiesto de Android.
⬜️ Envía cualquier evento al receptor.
Hay un paso adicional si desea registrar el receptor Dinámica
⬜️ Registrar y dar de baja destinatarios en el evento.
Estos son los tres pasos principales para crear nuestro receptor.
El receptor de transmisión y los proveedores de servicios, actividades y contenido son un componente de Android, por lo que es el punto de entrada a nuestra aplicación.
Como sugiere el nombre, es un componente que recibe mensajes o eventos del sistema o de otras aplicaciones.
- Al igual que con otros componentes de Android, lo primero que debemos hacer es registrar el receptor en el archivo de manifiesto de Android.
Para permitir que el receptor reciba eventos desde fuera de nuestra aplicación, si solo desea usar el receptor localmente, configúrelo en Incorrecto.
Esto quiere decir que el evento que queremos recibir será cuando el sistema esté totalmente arrancado (booted).
Incluso si desea crear eventos personalizados, puede configurar los eventos que necesita.
2. Cree una clase que implemente la clase abstracta BroadcastReceiver.
Cuando se instala la aplicación, el administrador de paquetes ahora ha registrado el receptor, por lo que la aplicación ahora puede recibir eventos incluso si no se está ejecutando.
La respuesta es sí… pero no 🤨, y… depende.
- Receptor de radiodifusión declarado estáticamente
Bueno, el receptor de transmisión en sí no tiene un ciclo de vida como una Actividad o Servicio, pero los objetos creados por el sistema cuando la aplicación recibe un evento se borran después de la ejecución. tomar el control() Terminar.
- Un receptor de transmisión declarado dinámicamente.
este»ciclo vital» estarán definido por componente Inicie el receptor. Si la Actividad da de alta al receptor, es decir la propia actividad se encarga de dar de baja al receptor, en ese momento, contexto inválido.
Cuando el contexto no es válido, el receptor no recibirá más eventos.
Este receptor se adjuntará a un contexto específico, como una Actividad.
- Cree un objeto en la Actividad (o use la biblioteca DI para obtener una instancia).
val receiver: CustomBroadcastReceiver = CustomBroadcastReceiver()
2. Registre el destinatario.
class MyActivity: AppCompatActvity() { val receiver: CustomBroadcastReceiver = CustomBroadcastReceiver() override fun onCreate(savedInstanceState: Bundle) {
super.onCreate(savedInstanceState)
...
registerReceiver(receiver)
}
}
3. Cerrar sesión del destinatario
class MyActivity: AppCompatActvity() {val receiver: CustomBroadcastReceiver = CustomBroadcastReceiver()override fun onCreate(savedInstanceState: Bundle) {
super.onCreate(savedInstanceState)
...
registerReceiver(receiver)
} override fun onDestroy() {
super.onDestroy()
unregisterReceiver(receiver)
}
}
Como puede ver, cancelamos el registro del receptor una vez que se destruya la Actividad.
Bien, entonces mi lista de tareas se ve así:
✅ Crea una clase de receptor de transmisión.
✅ Regístrelo en el archivo de manifiesto de Android.
⬜️ Envía cualquier evento al receptor.
✅ Registrar y dar de baja destinatarios en el evento.
El paso final es enviar cierta información para que nuestro destinatario la reciba. Este método depende del tipo de transmisión… ¡oh! , Casi lo olvido…
Podemos definir diferentes tipos de receptores de emisión, dependiendo de lo que queramos de este componente y lo que queramos hacer.
- receptor mundial -> Recibir eventos del sistema y de otras aplicaciones.
- receptor local -> Recibir eventos emitidos por nuestra aplicación.
- Crear un receptor de transmisión
class MyLocalBroadcastReceiver: BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent){
//All the logic inside
}
}
2. Crea una instancia de LocalBroadcastManager en nuestra Actividad
val localBroadcastManager: MyLocalBroadcastReceiver= LocalBroadcastManager.getInstance(context)
3. Registrar el destinatario
3.1 Dinámico
class MyActivity: AppCompatActvity() {val localBroadcastManager: LocalBroadcastManager = LocalBroadcastManager.getInstance(context)override fun onCreate(savedInstanceState: Bundle) {
super.onCreate(savedInstanceState)
...
registerReceiver(localBroadcastManager)
}override fun onDestroy() {
super.onDestroy()
unregisterReceiver(receiver)
}
}
3.2 Estática
4. Envía una transmisión
// Create intent with action
val localIntent: Intent = Intent(“CUSTOM_ACTION”)
// Send local broadcast
localBroadcastManager.sendBroadcast(localIntent);
este»CUSTOM_ACCIÓN» debe declararse en el filtro de intenciones cuando declaramos el receptor en el archivo de manifiesto de Android.
Con toda la información anterior en nuestras mentes, entonces…
desencadenar tomar el control() método, entonces deberíamos enviar algunos eventos. Para ello, tenemos tres enfoques diferentes:
- sendOrderedBroadcast(intento, cadena)
Envía algunos eventos a diferentes receptores en un orden específico. Si tenemos varios receptores, solo enviará eventos una vez a la vez. - enviar difusión (intención)
Envíe algún evento sin ningún tipo de comando o regla, simplemente envíe la transmisión globalmente y el receptor recibirá el evento. - LocalBroadcastManager.sendBroadcast
Solo enviará eventos a los receptores locales.
Solo un ejemplo de cómo enviar eventos globalmente desde una Actividad.
Intent().also { intent ->
intent.setAction("CUSTOM_ACTION")
intent.putExtra("data", "Nothing to see here, move along.")
sendBroadcast(intent)
}
Podemos restringir quién recibirá eventos a través de permisos. Si algún componente que recibe el evento no ha otorgado este permiso, el mensaje no se recibirá.
sendBroadcast(Intent("com.example.NOTIFY"), Manifest.permission.SEND_SMS)
Para solicitar este permiso al declarar receptor, estático (declarado en Android Manifest) o dinámico (registrarse y darse de baja directamente en Actividad) debemos declarar este permiso
android:permission="android.permission.SEND_SMS">
var filter = IntentFilter(Intent.ACTION_AIRPLANE_MODE_CHANGED)
registerReceiver(receiver, filter, Manifest.permission.SEND_SMS, null )