Un BroadcastReceiver es un componente fundamental en el desarrollo de aplicaciones Android que te permite recibir y responder a eventos o mensajes enviados por el sistema Android o por otras aplicaciones, de forma similar al patrón de diseño de publicación y suscripción. Estas emisiones se envían cuando ocurre un evento de interés. Por ejemplo: Como cuando se han descargado nuevos datos.
Las aplicaciones tienen la opción de suscribirse a emisiones específicas. Cuando se envía una emisión, el sistema redirige automáticamente las emisiones a las apps que se suscribieron para recibir ese tipo de emisión particular, en otras palabras, cuando están suscritas a algún evento las apps funcionan como un observador o receptor, que de acuerdo al evento tu app responderá de manera específica a estos eventos.
Los BroadcastReceiver son realmente útiles en diversas situaciones, como por ejemplo: la detección de cambios en la conectividad de red, la recepción de notificaciones push, Alteraciones en el estado de la batería o de la pantalla, la recepción de mensajes de SMS, entre otras funcionalidades.
Por lo general, los BroadcastReceivers pueden usarse como un sistema de mensajería entre aplicaciones. Sin embargo, debes tener mucho cuidado de no abusar ya estos eventos se van ha ejecutar tareas en segundo plano que puedan contribuir a ralentizar el rendimiento del sistema.
Cómo recibir emisiones
Las aplicaciones pueden recibir emisiones de dos formas: a través de receptores que se declaran en el archivo de manifiesto y mediante receptores que se registran dinámicamente en el contexto de la aplicación.
Declaración en el archivo de manifiesto:
Esta es la forma estática de registrar un BroadcastReceiver. En el archivo de manifiesto de la aplicación (AndroidManifest.xml), puedes especificar los receptores de emisiones que deseas utilizar y asociarlos a eventos específicos. Esto permite que el sistema Android sepa qué BroadcastReceiver debe manejar qué tipo de emisiones. Por ejemplo:
En este ejemplo, hemos declarado un BroadcastReceiver llamado MiReceiver que maneja dos tipos de emisiones: cuando el dispositivo se inicia (BOOT_COMPLETED) y un evento personalizado (EVENTO_CUSTOM) que puedes definir en tu aplicación. Cuando ocurren estos eventos, el sistema Android automáticamente inicia el BroadcastReceiver correspondiente.
Registro dinámico en el contexto de la aplicación:
Esta es la forma dinámica de registrar un BroadcastReceiver en tiempo de ejecución dentro de tu código Java o Kotlin. En lugar de declararlo en el archivo de manifiesto, puedes crear e iniciar un BroadcastReceiver en respuesta a ciertos eventos o condiciones en tu aplicación. Esto te da un mayor control sobre cuándo se registra y desregistra el BroadcastReceiver.
Aquí tienes un ejemplo de registro dinámico:
En este caso, estamos registrando un BroadcastReceiver llamado miReceiver para manejar el evento personalizado EVENTO_CUSTOM en el contexto de la aplicación. Esto te permite controlar cuándo comienza y se detiene la recepción de emisiones en función de la lógica de tu aplicación.
En resumen, puedes utilizar la declaración en el archivo de manifiesto para receptores que deben estar siempre disponibles, y el registro dinámico en el contexto de la aplicación para casos en los que deseas un mayor control sobre cuándo se registran y desregistran los BroadcastReceiver.