Módulo LSPosed/Xposed que corrige el audio de inDrive en Android Auto.
- El Problema
- La Solución
- Instalación
- Cómo Funciona
- Compilar desde Código
- Logs y Debugging
- Documentación
- Roadmap
inDrive + Android Auto = audio roto.
Las notificaciones de inDrive (solicitudes de viaje) solo se escuchan por los parlantes del auto cuando hay música reproduciéndose. Sin música (Spotify, YT Music, etc.), las notificaciones no se escuchan por Android Auto.
inDrive no mantiene una MediaSession activa
→ Android Auto no reconoce inDrive como app de audio
→ Sin música: no hay sesión de audio → las notificaciones no se enrutan al auto
→ Con música: Spotify tiene MediaSession → las notificaciones se "cuelan" (duck)
InDriveAudioFix intercepta las llamadas de audio de inDrive mediante Xposed y:
-
MediaSession persistente — se crea al cargar el módulo y se mantiene activa mientras inDrive esté en memoria. Android Auto siempre ve a inDrive como una app con audio disponible.
-
Notificación persistente — se publica automáticamente para que Android Auto mantenga la sesión de audio activa incluso cuando inDrive no está reproduciendo nada.
-
Corrección de AudioAttributes — fuerza
USAGE_ASSISTANCE_NAVIGATION_GUIDANCEen todos los sonidos de inDrive para que Android Auto los priorice como navegación. -
Inyección en notificaciones — intercepta
NotificationManager.notify()e inyecta el token de MediaSession en las notificaciones de inDrive.
- Dispositivo root con KernelSU, Magisk o similar
- LSPosed Framework instalado (Zygisk o tradicional)
- Android 8.0+ (API 26+), probado en Android 16
- Descarga el APK desde GitHub Releases
- Instálalo como app normal
- Abre LSPosed Manager
- Activa el módulo InDriveAudioFix
- En Scope, selecciona inDrive (
sinet.startup.inDriver) - Reinicia inDrive (force stop o reboot)
⚡ Sin configuración adicional. El módulo funciona en segundo plano sin interfaz de usuario.
┌─────────────────────────────────────────────────┐
│ inDrive se inicia │
└──────────────────────┬──────────────────────────┘
│
┌──────────────────────▼──────────────────────────┐
│ LSPosed carga InDriveAudioFix │
│ ┌─────────────────────────────────────────┐ │
│ │ hookAudioAttributes() │ │
│ │ └─ Fuerza USAGE_NAVIGATION_GUIDANCE │ │
│ ├─────────────────────────────────────────┤ │
│ │ hookMediaPlayer() │ │
│ │ └─ Corrige AudioAttributes asignados │ │
│ ├─────────────────────────────────────────┤ │
│ │ hookAudioFocusAndSession() │ │
│ │ ├─ Crea MediaSession persistente │ │
│ │ ├─ Gestiona audio focus │ │
│ │ └─ Publica notificación persistente │ │
│ ├─────────────────────────────────────────┤ │
│ │ hookNotificationNotify() │ │
│ │ └─ Inyecta MediaSession en notifs │ │
│ └─────────────────────────────────────────┘ │
└──────────────────────┬──────────────────────────┘
│
┌──────────────────────▼──────────────────────────┐
│ Android Auto reconoce el audio │
│ ┌─────────────────────────────────────────┐ │
│ │ ✅ MediaSession activa → app visible │ │
│ │ ✅ Notificaciones enrutadas al auto │ │
│ │ ✅ AudioAttributes de navegación │ │
│ │ ✅ Funciona con y sin música │ │
│ └─────────────────────────────────────────┘ │
└─────────────────────────────────────────────────┘
| Hook | Método | Propósito |
|---|---|---|
hookAudioAttributes |
AudioAttributes.Builder.build() |
Fuerza USAGE de navegación |
hookMediaPlayer |
MediaPlayer.setAudioAttributes() |
Corrige atributos directos |
hookSoundPool |
SoundPool.Builder.setAudioAttributes() |
Corrige sonidos cortos |
hookAudioFocusAndSession |
MediaPlayer.start/pause/stop/release() |
Gestiona focus + sesión |
hookNotificationNotify |
NotificationManager.notify() |
Inyecta MediaSession |
# Clonar
git clone https://github.com/criollojoel10/InDriveAudioFix.git
cd InDriveAudioFix
# Compilar debug
./gradlew assembleDebug
# Compilar release (minificado)
./gradlew assembleRelease
# Outputs
app/build/outputs/apk/debug/app-debug.apk
app/build/outputs/apk/release/app-release.apkNota: Requiere JDK 17 y Android SDK. El APK se firma con debug keystore automáticamente.
# Ver todos los logs del módulo
adb logcat | grep InDriveAudioFix
# Solo errores
adb logcat | grep "InDriveAudioFix ❌"
# Ver audio focus
adb logcat | grep -E "AudioFocus|requestAudioFocus"
# Ver MediaSession
adb logcat | grep -E "MediaSession|PlaybackState"| Mensaje | Significado |
|---|---|
✅ Todos los hooks instalados correctamente |
Módulo funcionando |
✅ MediaSession persistente creada y activa |
Sesión de audio activa |
🔔 Notificación persistente publicada |
Notificación visible |
AudioAttributes.build(): X → 12 |
Atributo corregido a navegación |
❌ Error crítico al instalar hooks |
Algo falló (reportar issue) |
| Archivo | Contenido |
|---|---|
DOCUMENTACION_TECNICA.md |
Documentación técnica completa (arquitectura, APIs, debugging) |
GUIA_RAPIDA.md |
Guía de referencia rápida |
CHANGELOG.md |
Historial de cambios por versión |
- v1.0.0 — AudioAttributes fix + MediaSession básica
- v1.0.1 — Hooks consolidados, APK optimizado, documentación
- v2.0.0 — MediaSession persistente, notificaciones sin música, Android 16 ✓
- v2.1.0 — OwnTracks integration para GPS secundario en Nodo-02
- v2.2.0 — Auto-recovery de MediaSession, watchdog interno
- v3.0.0 — Valhalla map-matching para rutas precisas
- Fork del repo
- Crea tu rama:
git checkout -b feature/mi-mejora - Commit:
git commit -m 'feat: mi mejora' - Push:
git push origin feature/mi-mejora - Abre un Pull Request
MIT — Haz lo que quieras, pero bajo tu propia responsabilidad.
Joel Criollo Abarca — @criollojoel10
Hecho con 🥭 para la comunidad de Riobamba