Implementación de Permisos de Localización y Notificación en Android
Clase 21 de 33 • Curso de Android: Integración de APIs nativas
Resumen
Generar aplicaciones móviles que respeten las políticas de permisos en Android requiere un manejo claro y eficiente. Aprende cómo integrar permisos de localización y notificaciones usando intents y diálogos en tu mapa interactivo.
¿Cómo configurar los intents para gestionar permisos?
Lo primero es definir dos nuevos intents en el archivo Tracking Intent:
- Permisos de Localización: Incluye dos variables booleanas:
- AcceptedLocationPermission: indica si el usuario acepta los permisos.
-
ShowLocationRationale: para saber cuándo mostrar justificación del permiso.
-
Permisos de Notificación: Crea variables similares:
- AcceptedNotificationPermission.
- ShowNotificationRationale.
Ambos intents deben añadirse al ViewModel para actualizar el estado adecuadamente:
HasLocationPermission.value = intent.AcceptedLocationPermission
ShowLocationRationale = intent.ShowLocationRationale
¿Cómo manejar estos estados en el ViewModel?
En el estado TrackLocationState
debes crear variables booleanas que controlen cuándo mostrar los Rationales:
var ShowLocationRationale = false
var ShowNotificationRationale = false
Con el estado actualizado, regresa al TrackingMapViewModel
y asigna correctamente estos valores basándote en los intents recibidos.
Recuerda que mantener consistencia entre los nombres y tipos en estos estados es clave para evitar errores.
¿Cómo implementar un PermissionLauncher para múltiples permisos?
Para gestionar múltiples permisos desde tu MapScreen, necesitas traer el contexto actual y la actividad para aprovechar las extension functions de permisos que ya creaste:
val context = LocalContext.current
val activity = context as Activity
Ahora crea un PermissionLauncher
utilizando rememberLauncherForActivityResult
, ideal para manejar más de un permiso simultáneamente:
val permissionLauncher = rememberLauncherForActivityResult(
ActivityResultContracts.RequestMultiplePermissions()
) { resultado ->
// Aquí verificarás y manejarás cada permiso
val hasLocation = activity.hasLocationPermission()
val hasNotification = activity.NotificationPermission()
}
Cada vez que obtengas un resultado, utiliza las funciones previamente definidas para verificar y reaccionar en consecuencia.
¿Cuál es el rol de los diálogos Rationales?
Los Rationales son diálogos que informan al usuario por qué necesitas determinado permiso:
- Si el estado del permiso indica que debes mostrar un rationale, dispara el diálogo correspondiente.
- Luego, envía un intent que registre la decisión del usuario de aceptar o rechazar.
Al configurar tu diálogo, recuerda integrar métodos para aceptar y desestimar (onAccept
y onDismiss
) y actualizar estados al cerrar estos Rationales:
onDismiss -> trackingIntent.submitLocationPermissionInfo(context.hasLocationPermissions(), false)
Continuemos al próximo módulo para implementar estos lanzamientos de permisos exitosamente.