Implementación de ViewModel para Rastreo de Localización en Android

Clase 18 de 33Curso de Android: Integración de APIs nativas

Resumen

Implementar la lógica para rastrear posiciones en tiempo real en tu aplicación Android es posible a través de un ViewModel organizado. Utilizando la integración con Hilt y los flujos reactivos de Kotlin (StateFlow y Flow), puedes gestionar fácilmente la observabilidad de tu ubicación y el manejo dinámico de permisos dentro del ecosistema Android.

¿Cómo configurar un ViewModel con Hilt para mapas?

La configuración del ViewModel comienza integrándolo con Hilt mediante la anotación @HiltViewModel. Las dependencias esenciales, como un LocationTracker, se inyectarán fácilmente y permitirán monitorizar eficazmente los estados relacionados con la ubicación.

  • Crea un nuevo TrackingMapViewModel.
  • Utiliza la anotación @HiltViewModel.
  • Declara dependencias como LocationTracker.
  • Gestiona los estados mediante variables de tipo MutableStateFlow.

¿Qué variables se necesitan para gestionar estados de localización?

Existen variables clave que te permitirán verificar los permisos y controlar si el rastreo debe activarse o detenerse en cualquier momento:

  • HasLocationPermission: define si la aplicación tiene los permisos necesarios.
  • ShouldTrack: indica cuándo la localización debería rastrearse, deteniéndose o reanudándose.
  • IsAllowedToTrack: combina las variables anteriores para activar automáticamente el rastreo.

¿Cómo manejar estados de rastreo a través de intenciones?

Manejar las acciones que afectan la política de rastreo de localización se administra mediante intenciones (Intents). Estos se utilizan para modificar el estado interno del rastreo en el ViewModel:

  • ResumeTracking: activa la monitorización (ShouldTrack = True).
  • PauseTracking: detiene temporalmente la monitorización (ShouldTrack = False).
  • StartTracking: inicia por primera vez el monitoreo de la localización (ShouldTrack = True y activar seguimiento en LocationTracker).

¿De qué manera conectar el ViewModel con la interfaz de mapa?

La interfaz debe reaccionar ante el cambio de estado reflejado en el ViewModel. Debes integrar dicho estado en tu pantalla utilizando Compose:

  • Crea una pantalla de mapa MapScreen.
  • Enlaza el estado del ViewModel en Compose mediante collectAsState().
  • Asegura que las acciones de la interfaz (como botones flotantes) despachen correctamente las intenciones al ViewModel.

¿Cómo resolver errores comunes relacionados con ubicación?

Un error frecuente es dejar activada la observabilidad desde código previo utilizado para pruebas o ejercicios anteriores. Para solucionar esto:

  • Verifica en MainActivity la presencia de código antiguo y retíralo.
  • Asegura activar correctamente los permisos de ubicación desde la configuración del dispositivo.
  • Reinicia el emulador o dispositivo para validar correctamente el comportamiento esperado.

Este enfoque ordenado permite construir un sistema profesional de rastreo fácilmente extendible y reutilizable en múltiples aplicaciones.