Configuración de métodos del ViewModel para gestión de cámara
Clase 26 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
Optimizar la gestión del estado y datos en una aplicación Android es clave para mejorar la controlabilidad y eficiencia del desarrollo. Una de las formas más efectivas de hacerlo es mediante la incorporación de ViewModel en aplicaciones basadas en Kotlin. Este tema cubre detalladamente cómo implementar funciones esenciales en un ViewModel dedicado a manejar la cámara en una aplicación Android, facilitando el proceso de captura, visualización previa y guardado de imágenes asociadas a localizaciones.
¿Cómo configurar el ViewModel para gestionar el estado de la cámara?
El ViewModel debe contener claros estados diferenciados para identificar si la aplicación está en modo captura activa o en vista previa (preview). Esto implica definir adecuadamente métodos que actúen sobre dicho estado:
- Para cancelar la previsualización, se define un método privado con corrutinas:
private suspend fun cancelPreview() {
photoHandler.cancelPreview()
_uiState.value = _uiState.value.copy(isPreviewMode = false)
}
Es fundamental asegurar que este método se llame correctamente dentro de un ámbito de corrutina (por ejemplo, usando viewModelScope.launch).
¿Qué pasos seguir para procesar y preparar una foto capturada?
Una vez que se toma una foto, es necesario procesarla y preparar su vista previa:
- Primero, se define otra función suspendida dedicada a procesar la imagen:
private suspend fun processPhoto(data: ByteArray){
photoHandler.onPhotoForPreview(data)
_uiState.value = _uiState.value.copy(isPreviewMode = true)
}
Con esta implementación se activa inmediatamente la vista previa al usuario, mostrando la foto recién capturada.
¿Cómo guardar una foto y vincularla con la última localización registrada?
Al decidir guardar una foto, el ViewModel debe vincular dicha foto con la localización más reciente disponible en la aplicación. Esta vinculación se realiza con una función privada:
private suspend fun savePhoto(){
val savedFile = photoHandler.getPreviewContent() ?: return
withLatestLocation(savedFile)
_uiState.value = _uiState.value.copy(
isPreviewMode = false,
lastSavedPhoto = savedFile
)
}
private suspend fun withLatestLocation(photoFile: File){
val locationData = locationTracker.locationData.value
val lastNonEmptySegment = locationData.locations.lastOrNull()
val latestLocation = lastNonEmptySegment?.copy(
listOfPhotos = lastNonEmptySegment.listOfPhotos + photoFile
) ?: return
val updatedSegments = locationData.locations.toMutableList().apply {
set(lastIndex, latestLocation)
}
locationTracker.updateLocationData(locationData.copy(locations = updatedSegments))
}
Con este proceso, cada foto guardada quedará convenientemente asociada a la última localización conocida, facilitando futuras consultas o visualizaciones basadas en ubicación.
¿Qué aporta el ViewModel resultante a tu aplicación?
- Facilita la separación clara entre la lógica del estado (captura, modo preview y guardado) y la interfaz gráfica.
- Controla eficazmente el estado visual y funcional de la cámara.
- Permite relacionar cada fotografía con datos específicos de ubicación, brindando valor adicional al manejo multimedia.
Si tienes inquietudes adicionales sobre cómo implementar la gestión del estado con ViewModel en Kotlin, comenta para ampliar detalles o aclarar dudas.