Broadcast Receivers para escuchar eventos del sistema en Android
Clase 32 de 33 • Curso de Android: Integración de APIs nativas
Contenido del curso
Google Maps SDK
Servicios de Localización
- 7

Emisión controlada de tiempo con Kotlin Flows
12:55 min - 8

Simulación de ubicación GPS en emulador y dispositivo Android
05:48 min - 9

Modelos de localización personalizados con Clean Architecture en Kotlin
08:36 min - 10

Mapeo de datos de localización en Android con Kotlin
14:51 min - 11

Inyección de dependencias para observar localización en Android
06:33 min - 12

StateFlow para controlar localización en aplicaciones Android
08:47 min - 13

State Flows para controlar localización y tiempo en Kotlin
10:00 min - 14

Configuración y pruebas de Location Tracker en Android
09:37 min
Integración Maps con Localización
Manejo de permisos
- 19

Gestión de permisos en tiempo de ejecución para aplicaciones Android
08:34 min - 20

Creación de diálogos de permisos reutilizables en Android
06:55 min - 21

Gestión de permisos de localización y notificaciones en Android
10:18 min - 22

Implementación de solicitud de permisos con LaunchedEffect en Compose
09:53 min
Integración cámara
- 23

Implementación de PhotoHandler para gestión de cámara en Android
11:59 min - 24

Conversión de Bitmaps a Byte Arrays con Extension Functions
05:58 min - 25

Definición de Intents y estados de UI para cámara en Kotlin
08:41 min - 26

Configuración de métodos del ViewModel para gestión de cámara
09:41 min - 27

Integración de CameraX con Jetpack Compose en Android
14:23 min - 28

Creación de pantalla de previsualización de fotos con Jetpack Compose
08:44 min - 29

Integración de galería fotográfica en mapas con Jetpack Compose
11:56 min
Servicios en Android
Transmisiones en Android (Broadcast)
Escuchar y responder a eventos específicos es fundamental en aplicaciones Android. Los broadcast receivers son precisamente los encargados de escuchar eventos emitidos por el sistema operativo o eventos personalizados creados por la aplicación. Eventos comunes incluyen conexiones USB o cambios en el modo avión.
¿qué es un Broadcast Receiver?
Un broadcast receiver es un componente esencial para reaccionar a eventos específicos que se generan dentro o fuera de una aplicación. Pueden escuchar desde eventos del propio sistema operativo hasta eventos personalizados definidos por el desarrollador.
¿Cómo crear un Broadcast Receiver personalizado?
Crear un receptor propio requiere definir una clase que extienda de BroadcastReceiver e implemente el método onReceive:
class StopReceiver : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
val action = intent?.action ?: return
if (action != ACTION_STOP) return
// Lógica para detener la actividad o servicio pertinente.
}
companion object {
const val ACTION_STOP = "trackit.action.stoptracking"
}
}
Para manejar eventos con eficacia, es importante validar que el mensaje recibido no sea nulo y coincida con la acción esperada.
¿Qué operaciones se ejecutan al recibir un evento?
Al recibir el evento de detención, es necesario realizar una serie de tareas que involucran:
- Establecer el estado de tracking como desactivado.
- Detener la observación de la localización.
- Limpiar recursos, como fotografías almacenadas.
Estas tareas son realizadas habitualmente sobre un scope de coroutine, asegurando la finalización de cada proceso:
applicationScope.launch {
locationTracker.setIsTracking(false)
locationTracker.stopObservingLocation()
photoHandler.clearPhotos().join()
}
Tras esto, se envía un comando para detener el servicio asociado:
val serviceIntent = Intent(context, TrackingService::class.java).apply {
action = TrackingService.ACTION_STOP
}
if (TrackingService.isActive.value) {
context?.startService(serviceIntent)
}
¿Cómo registrar un Broadcast Receiver en Android?
Todos los receptores deben registrarse correctamente desde el archivo Manifest de la aplicación:
<receiver android:name=".StopReceiver" android:exported="false"/>
El parámetro exported indica si otras aplicaciones podrían activar este receptor; habitualmente, se establece en false.
¿De qué forma interactúa un Broadcast Receiver con notificaciones?
El uso de un pending intent permite agregar acciones a las notificaciones, enviando mensajes a nuestro receptor para ejecutar eventos específicos aunque la aplicación esté cerrada:
val stopIntent = Intent(applicationContext, StopReceiver::class.java).apply {
action = StopReceiver.ACTION_STOP
}
val stopPendingIntent = PendingIntent.getBroadcast(applicationContext, 0, stopIntent, PendingIntent.FLAG_IMMUTABLE)
Al incorporar esta intención en la notificación, se vincula la interacción del usuario directamente al receptor personalizado:
notificationBuilder.addAction(R.drawable.ic_launcher_foreground, applicationContext.getString(R.string.stop), stopPendingIntent)
Al pulsar esta acción en la notificación, la aplicación se activa y ejecuta las tareas correspondientes establecidas en el receptor de eventos.
¿Has utilizado antes broadcast receivers para manejar eventos específicos en tus aplicaciones? Comparte tu experiencia o dudas en los comentarios.