Contenido del curso
Google Maps SDK
Servicios de Localización
- 7

Kotlin Flows para medir tiempo en Android
12:54 min - 8

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

Modelos de localización propios con Clean Architecture
08:36 min - 10

Callbacks de Android convertidos en Flows
14:50 min - 11

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

LocationTracker con StateFlow para rastreo en Android
08:46 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
Integración cámara
- 23

Cómo guardar fotos en Android con PhotoHandler
11:59 min - 24

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

CameraViewModel con Hilt y StateFlow
08:40 min - 26

Configuración de métodos del ViewModel para gestión de cámara
09:40 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

Galería de fotos en marcadores del mapa
11:55 min
Servicios en Android
Transmisiones en Android (Broadcast)
Permisos de Android en tiempo de ejecución
Resumen
Cuando tu aplicación accede a datos sensibles como la ubicación o usa hardware como la cámara, Android exige declarar y solicitar permisos en tiempo de ejecución. Aprenderás a configurar el AndroidManifest, crear extension functions reutilizables en Kotlin y manejar el rationale para persuadir al usuario, una habilidad clave si desarrollas apps móviles modernas.
¿Qué permisos se declaran en el AndroidManifest?
El primer paso siempre ocurre en el archivo AndroidManifest.xml, donde registras lo que tu aplicación va a usar. Sin esa declaración, Android no te deja avanzar [0:25].
En el caso de la localización, hay dos tipos que conviene diferenciar:
- ACCESS_COARSE_LOCATION: la ubicación aproximada que entrega la red celular.
- ACCESS_FINE_LOCATION: la ubicación precisa que proporciona el GPS, y es la que requiere permiso explícito en tiempo de ejecución.
- POST_NOTIFICATIONS y CAMERA: otros permisos sensibles que también se piden en runtime.
¿Qué es un permiso en tiempo de ejecución en Android? Es un permiso que el usuario debe aprobar mientras la app corre, no solo al instalarla. Aplica a datos sensibles como ubicación, cámara o notificaciones.
¿Cómo crear extension functions para validar permisos en Kotlin?
Una buena práctica es centralizar la lógica de permisos en un archivo de utilidades. Dentro de la carpeta presentation, creas un package llamado utils y allí un archivo PermissionsUtils con extension functions sobre Context [1:15].
La función base se apoya en ContextCompat.checkSelfPermission y compara el resultado con PackageManager.PERMISSION_GRANTED. A partir de ahí, construyes funciones específicas que reutilizan esa validación.
¿Cómo validar el permiso de localización?
Defines una función hasLocationPermission sobre Context que retorna un boolean. Internamente llama a hasPermission(android.Manifest.permission.ACCESS_FINE_LOCATION). Así, en cualquier parte de la app puedes preguntar de forma limpia si el GPS está autorizado.
¿Cómo manejar el permiso de notificaciones según la versión de Android?
Aquí entra un detalle importante: el permiso POST_NOTIFICATIONS solo existe a partir de Android Tiramisú (API 33). Por eso la función hasNotificationPermission evalúa primero si Build.VERSION.SDK_INT es mayor o igual a VERSION_CODES.TIRAMISU [3:30].
Si la versión es compatible, valida el permiso real. Si es anterior, simplemente retorna true. Con esto garantizas retrocompatibilidad entre sistemas operativos sin romper la app en dispositivos antiguos.
¿Y la cámara?
La función hasCameraPermission sigue el mismo patrón, cambiando el string del permiso por android.Manifest.permission.CAMERA. Aunque no la uses todavía, dejarla lista en tus extension functions ahorra trabajo futuro.
¿Qué es el rationale y cuándo debes mostrarlo?
Las buenas prácticas en Android indican que debes pedir un permiso justo cuando se va a usar, no al inicio sin contexto. Si el usuario lo niega por accidente o decisión, el sistema activa una bandera llamada rationale [5:00].
Esa bandera te permite mostrar un diálogo explicando por qué tu app necesita ese permiso. Sin ese contexto, las probabilidades de que el usuario lo conceda en un segundo intento bajan mucho.
¿Qué hace shouldShowRequestPermissionRationale? Devuelve
truecuando el usuario ya rechazó un permiso pero aún puedes pedirlo de nuevo. Es la señal para mostrar un diálogo persuasivo antes de relanzar la solicitud.
¿Cómo implementar shouldShowRationale en cada caso?
Defines extension functions sobre ComponentActivity:
shouldShowLocationPermissionRationale: invocashouldShowRequestPermissionRationaleconACCESS_FINE_LOCATION.shouldShowNotificationPermissionRationale: primero valida que la versión sea Tiramisú o superior y luego pregunta porPOST_NOTIFICATIONS.shouldShowCameraPermissionRationale: aplica directamente sobre el permisoCAMERA.
kotlin fun ComponentActivity.shouldShowLocationPermissionRationale(): Boolean { return shouldShowRequestPermissionRationale( android.Manifest.permission.ACCESS_FINE_LOCATION ) }
Con este conjunto de utilidades tienes una base sólida para pedir permisos a lo largo de toda tu aplicación de forma consistente. El siguiente paso natural es construir un diálogo que levante ese rationale y le explique al usuario, en el momento adecuado, por qué necesitas acceso. ¿Cómo lo resolverías tú en tu próxima app? Cuéntame en los comentarios.