# 📍 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. ![Location Simulator](location.png) ## ✨ 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 1. Clona el repositorio: ```bash git clone https://github.com/tuusuario/location-simulator.git cd location-simulator ``` 2. Abre el proyecto en Android Studio 3. Sincroniza las dependencias de Gradle 4. 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 1. Introduce latitud y longitud manualmente 2. Presiona "Preparar Ubicación Personalizada" 3. 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: 1. Fork el proyecto 2. Crea una rama para tu feature (`git checkout -b feature/NuevaFuncionalidad`) 3. Commit tus cambios (`git commit -m 'Agregar nueva funcionalidad'`) 4. Push a la rama (`git push origin feature/NuevaFuncionalidad`) 5. Abre un Pull Request ## 📄 Licencia Este proyecto está bajo la Licencia MIT. Ver el archivo `LICENSE` para más detalles. ## 👨‍💻 Autor **Alejandro** - [@manalejandro](https://github.com/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 ```kotlin 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> fun setupTestProviders() fun cleanupTestProviders() ``` ### LocationViewModel #### Estado de la Aplicación ```kotlin data class LocationState( val currentLocation: Location? = null, val mockedLocation: Location? = null, val popularLocations: List> = 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: 1. Revisa los [Issues existentes](https://github.com/tuusuario/location-simulator/issues) 2. Crea un nuevo Issue con detalles del problema 3. 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.