📍 Simulador de Ubicación Android
Una aplicación Android desarrollada en Kotlin que permite simular ubicaciones usando la API de Google sin necesidad de permisos de ubicación reales. Perfecta para testing y desarrollo de aplicaciones basadas en ubicación.
✨ Características
- Sin permisos reales: Simula ubicaciones sin solicitar permisos de ubicación al usuario
- Múltiples proveedores: Establece ubicaciones simuladas en GPS, Network, Passive y Fused providers
- Última ubicación de Google: Consulta y simula la última posición guardada por Google
- Ubicaciones populares: Acceso rápido a ciudades españolas principales
- Ubicaciones aleatorias: Genera coordenadas aleatorias cerca de ubicaciones base
- Ubicaciones personalizadas: Permite establecer coordenadas específicas manualmente
- Interfaz moderna: Diseño Material 3 con Jetpack Compose
🛠️ Tecnologías
- Kotlin: Lenguaje principal
- Jetpack Compose: UI moderna y declarativa
- Material 3: Sistema de diseño de Google
- LocationManager: API nativa de Android para manejo de ubicaciones
- Coroutines: Programación asíncrona
- StateFlow: Manejo reactivo del estado
- MVVM: Arquitectura recomendada por Google
🚀 Instalación
- Clona el repositorio:
git clone https://github.com/tuusuario/location-simulator.git
cd location-simulator
-
Abre el proyecto en Android Studio
-
Sincroniza las dependencias de Gradle
-
Ejecuta la aplicación en un dispositivo o emulador
📱 Uso
Ubicación Simulada
- "Última de Google": Obtiene la última ubicación que Google tendría guardada
- "Simular Nueva": Genera una nueva ubicación basada en la actual
Ubicaciones Populares
- Selecciona una ciudad española para establecer tu ubicación allí
- Usa "Aleatorio" para generar una ubicación cercana a la ciudad seleccionada
Ubicación Personalizada
- Introduce latitud y longitud manualmente
- Presiona "Preparar Ubicación Personalizada"
- Confirma con "✓ Aceptar y Establecer" para aplicar a todos los proveedores
🔧 Arquitectura
Componentes Principales
- MainActivity: Actividad principal con interfaz Compose
- LocationService: Servicio que maneja la lógica de ubicaciones simuladas
- LocationViewModel: ViewModel que gestiona el estado de la aplicación
- LocationState: Data class que representa el estado de la UI
Flujo de Datos
UI (Compose) → ViewModel → LocationService → LocationManager + SharedPreferences
📋 Proveedores Soportados
La aplicación establece ubicaciones simuladas en todos los proveedores del sistema:
- GPS_PROVIDER: Simulación de GPS con alta precisión (5m)
- NETWORK_PROVIDER: Simulación de ubicación por red (20m de precisión)
- PASSIVE_PROVIDER: Proveedor pasivo (15m de precisión)
- FUSED_PROVIDER: Simulación del proveedor fusionado (8m de precisión)
🎯 Casos de Uso
- Desarrollo de Apps: Testing de funcionalidades basadas en ubicación
- QA Testing: Pruebas de aplicaciones en diferentes ubicaciones
- Demostraciones: Mostrar funcionalidades sin necesidad de moverse físicamente
- Educación: Aprender sobre APIs de ubicación de Android
🔒 Seguridad
- No requiere permisos de ubicación reales
- Las ubicaciones se almacenan localmente en SharedPreferences
- No envía datos a servidores externos
- Código completamente open source
🤝 Contribuir
Las contribuciones son bienvenidas. Para contribuir:
- Fork el proyecto
- Crea una rama para tu feature (
git checkout -b feature/NuevaFuncionalidad) - Commit tus cambios (
git commit -m 'Agregar nueva funcionalidad') - Push a la rama (
git push origin feature/NuevaFuncionalidad) - Abre un Pull Request
📄 Licencia
Este proyecto está bajo la Licencia MIT. Ver el archivo LICENSE para más detalles.
👨💻 Autor
Alejandro - @manalejandro
⭐ Agradecimientos
- Google por la documentación de LocationManager
- La comunidad de Android por las mejores prácticas
- Material Design por las guías de UI/UX
📚 API Reference
LocationService
Métodos Principales
suspend fun getLastKnownLocation(): Location?
suspend fun getCurrentLocation(): Location?
suspend fun mockLocation(latitude: Double, longitude: Double): Boolean
suspend fun setMockLocationOnAllProviders(latitude: Double, longitude: Double): Boolean
fun getPopularLocations(): List<Pair<String, Location>>
fun setupTestProviders()
fun cleanupTestProviders()
LocationViewModel
Estado de la Aplicación
data class LocationState(
val currentLocation: Location? = null,
val mockedLocation: Location? = null,
val popularLocations: List<Pair<String, Location>> = emptyList(),
val isLoading: Boolean = false,
val error: String? = null,
val hasLocationPermission: Boolean = true
)
🐛 Problemas Conocidos
- En algunos emuladores, los proveedores de prueba pueden no funcionar correctamente
- La funcionalidad de LocationManager requiere que la app esté en modo debug
🔮 Roadmap
- Soporte para rutas simuladas
- Exportar/importar ubicaciones
- Historial de ubicaciones
- Widget de acceso rápido
- Soporte para coordenadas UTM
- Integración con mapas
📞 Soporte
Si tienes preguntas o problemas:
- Revisa los Issues existentes
- Crea un nuevo Issue con detalles del problema
- Contacta al desarrollador
⚠️ Nota: Esta aplicación está diseñada para propósitos de desarrollo y testing. No usar para evadir restricciones geográficas o con fines maliciosos.
