Files
location/README.md
2025-07-20 22:12:27 +02:00

176 líneas
5.7 KiB
Markdown

# 📍 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<Pair<String, Location>>
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<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:
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.