176 líneas
5.7 KiB
Markdown
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.
|
|
|
|

|
|
|
|
## ✨ 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.
|