Gestión de permisos en tiempo de ejecución para aplicaciones Android
Clase 19 de 33 • Curso de Android: Integración de APIs nativas
Contenido del curso
- 7

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

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

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

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

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

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

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

Configuración y pruebas de Location Tracker en Android
09:37 quiz de Servicios de Localización
- 15

Integración de ubicación actual en mapas interactivos
06:46 - 16

Creación de polilíneas con datos reales en mapas de Android
04:07 - 17

Integración de intents y estados en pantalla mapa con Compose
08:05 - 18

Implementación del ViewModel para rastreo de localización en Android
14:29 quiz de Integración Maps con Localización
- 19

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

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

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

Implementación de solicitud de permisos con LaunchedEffect en Compose
09:53 quiz de Manejo de permisos
- 23

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

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

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

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

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

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

Integración de galería fotográfica en mapas con Jetpack Compose
11:56 quiz de Integración cámara
Si desarrollas una aplicación Android que accede a información sensible como la localización o utiliza hardware como la cámara, es esencial manejar correctamente los permisos. Encontrarás una explicación clara sobre cómo registrar y solicitar permisos en tiempo de ejecución, garantizando una mejor experiencia para el usuario.
¿Qué tipos de permisos debes registrar en Android Manifest?
Registrar permisos en el archivo Android Manifest es el primer paso al manejar datos o hardware importante:
- ACCESS_COARSE_LOCATION: Localización aproximada utilizando redes celulares.
- ACCESS_FINE_LOCATION: Localización precisa mediante GPS, que requiere permiso en tiempo de ejecución.
Cada permiso debe ser claramente declarado en el Manifest para que pueda ser gestionado apropiadamente por el sistema operativo.
¿Cómo crear funciones para verificar permisos fácilmente?
Para simplificar el manejo de permisos en tu aplicación, lo más recomendable es crear funciones extendidas (extension functions), agrupándolas dentro de un paquete de utilidades:
- Crea un paquete llamado
Utilsdentro de tu carpeta de Presentation. - Añade allí el archivo
PermissionsUtils.
Puedes establecer una función general:
private fun Context.hasPermission(permission: String): Boolean {
return ContextCompat.checkSelfPermission(
this,
permission
) == PackageManager.PERMISSION_GRANTED
}
Desde aquí, define funciones específicas para cada permiso indispensable:
- Localización precisa:
fun Context.hasLocationPermission(): Boolean {
return hasPermission(android.Manifest.permission.ACCESS_FINE_LOCATION)
}
- Notificaciones (a partir de Android Tiramisu):
fun Context.hasNotificationPermission(): Boolean {
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
hasPermission(android.Manifest.permission.POST_NOTIFICATIONS)
} else {
true
}
}
- Uso de cámara:
fun Context.hasCameraPermission(): Boolean {
return hasPermission(android.Manifest.permission.CAMERA)
}
Estas funciones simplifican considerablemente la comprobación del estado de los permisos en distintos puntos de tu aplicación.
¿Para qué sirve el "rationale" en los permisos de Android?
La función shouldShowRequestPermissionRationale es crucial para informar y educar al usuario sobre la necesidad de un permiso específico si este fue negado previamente:
- Ejemplo con localización:
fun ComponentActivity.shouldShowLocationRationale(): Boolean {
return shouldShowRequestPermissionRationale(
android.Manifest.permission.ACCESS_FINE_LOCATION
)
}
- Ejemplo con notificaciones:
fun ComponentActivity.shouldShowNotificationRationale(): Boolean {
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU &&
shouldShowRequestPermissionRationale(
android.Manifest.permission.POST_NOTIFICATIONS
)
}
- Ejemplo con cámara:
fun ComponentActivity.shouldShowCameraRationale(): Boolean {
return shouldShowRequestPermissionRationale(
android.Manifest.permission.CAMERA
)
}
Implementando esta lógica, tu aplicación puede educar al usuario mostrándole mensajes oportunos antes de solicitar el permiso nuevamente, favoreciendo una decisión informada.