OpenRadioFM
OpenRadioFM (Mt8163, K706, MTK8259, QS NWD)
Install / Use
/learn @kapi21/OpenRadioFMREADME
OpenRadioFM - Community Logo Edition 📻
Aplicación de radio FM premium para Android Head Units, con soporte activo para K706, MT8163 (Junsun V1 Pro) y las plataformas MTK 8227L / 8259 / 8667.
Interfaz Glassmorphism, RDS completo (PS, RT, PTY, AF, TA, TP), y personalización avanzada de logos y temas.
🎯 Funciones Principales
| Función | MT8163 / Junsun | K706 | MTK8259/8667 | |---|:---:|:---:|:---:| | Sintonización FM | ✅ | ✅ | ✅ | | Seek / AutoScan | ✅ | ✅ | ✅ | | RDS PS (nombre) | ✅ | ✅ | ✅ | | RDS RT (información) | ✅ | ✅ | ✅ | | AF / TA / TP | ✅ | ✅ | ✅ | | DX / Local | ✅ | ✅ | ✅ | | Stereo / Mono | ✅ | ✅ | ✅ | | Layouts (V2 / V3) | ✅ | ✅ | ✅ | | Temas / Night Mode | ✅ | ✅ | ✅ | | Logos HD (Supabase) | ✅ | ✅ | ✅ | | Soporte Android Auto | ✅ | ✅ | ✅ | | Streaming Online | ✅ | ✅ | ✅ |
5.0.16 (abril 2026, hotfix): estabilidad de streaming en MT8163 (liberación de ExoPlayer coordinada), logos en V3/QS6 sin quedarse “pegados”, volante en segundo plano también en QS6, metadatos/notificaciones más coherentes (sin notify() si no hay permiso), getStationInfo desde UI en segundo plano, recordatorio HiHack tras reinicio. Pendiente validar en hardware real K706 y MT8163.
Unreleased (WIP): mejoras del widget (logo dinámico, banda, seek/mute, UX para launchers sin resize), backups de estado (opciones o copia completa con RadioLogos/), y icono launcher estilo OEM con drawable-nodpi-v4 para evitar pixelado en QS6/NWD. Ver CHANGELOG.md.
🏗️ Arquitectura
graph TB
subgraph "UI Layer"
MA[MainActivity]
LCN[Layout Controllers]
STM[Standard/V3 Layouts]
SLM[Simple Layout]
end
subgraph "Domain Managers"
PM[PlaybackManager]
SM[ScanManager]
HM[HistoryManager]
PRM[PresetManager]
RDS[RDSManager]
end
subgraph "System & UI Logic"
TM[ThemeManager]
NM[NightModeManager]
LM[LogoManager]
DM[DialogManager]
end
subgraph "Hardware Abstraction"
RSC[RadioServiceController]
REI[RadioEngine Interface]
DEV[DeviceManager]
HWM[HardwareManager]
end
subgraph "Radio Engines"
K706[K706Engine]
MT[MT8163Engine]
QS[QS6Engine]
MTK[MTK8259_8667Engine]
end
MA --> LCN
LCN --> STM
LCN --> SLM
MA --> PM
MA --> SM
MA --> HM
PM --> RSC
RSC --> REI
REI --> K706
REI --> MT
REI --> QS
REI --> MTK
style MA fill:#1a1a2e,stroke:#e94560,color:#fff
style PM fill:#16213e,stroke:#0f3460,color:#fff
style RSC fill:#16213e,stroke:#0f3460,color:#fff
📱 Hardware Compatible
| Dispositivo | Chip | Motor | Colaborador |
|---|---|---|---|
| JUNSUN V1 Pro / Topway | MediaTek MT8163 | FM_MT8163 | ✅ |
| Radio K706 / HCN / Vento | K706 + MCU | FM_K706 | ✅ |
| MTK 8227L / 8259 / 8667 | MediaTek | FM_MT8259 | 🤝 Csaba Edition |
| Radio NWD G5 | Qualcomm | FM_QS6 | 🛠️ Beta (rama QS_NWD) |
| Otros Android Head Units | Varía | FM_BASICO | ⚠️ Solo UI |
🛠️ Compilación
Requisitos
- Android Studio Hedgehog+ o SDK 34
- JDK 17
- Gradle 9.x (incluido en wrapper)
Supabase (obligatorio para compilar)
Desde v5.0.15, la URL y la clave anon de Supabase no van en el código: añádelas a local.properties en la raíz (junto a sdk.dir) o exporta SUPABASE_URL y SUPABASE_ANON_KEY. Plantilla: local.properties.example. Guía CI: docs/CI_SUPABASE.md.
Build
# Clonar
git clone https://github.com/kapi21/OpenRadioFM.git
cd OpenRadioFM
# Compilar
./gradlew assembleDebug
# APK generado en:
# app/build/outputs/apk/debug/app-debug.apk
Instalación en Head Unit
adb install -r app/build/outputs/apk/debug/app-debug.apk
⚠️ Problemas Conocidos (Abril 2026)
- Verificación v5.0.16: los cambios de la 5.0.16 aún deben probarse en K706 y MT8163 en condiciones reales (streaming, volante, logos, notificaciones).
- Audio Focus (K706): ✅ Resuelto. Centralización de foco en RadioManager para evitar cortes por conmutación de canal MCU (Channel 2/4).
- Volante en segundo plano (K706): En muchas ROM, con el launcher u otra app al frente, las teclas del volante llegan como
KeyEvental foco y la radio OEM sigue recibiendo mandos por MCU/QuickFish. OpenRadioFM no puede usar ese canal sin integración OEM; a partir de v5.0.10 el servicio de accesibilidad Factory Radio Hijacker puede capturar y reenviar esas teclas a la app (activar el servicio en Ajustes → Accesibilidad). Opcional (avanzado): en SharedPreferences RadioPresets,pref_a11y_forward_media_keys=falsedesactiva el reenvío (por defecto está activo). - Seek por Hardware (K706): Interactúa con el volumen en algunos firmwares (pendiente investigación MCU).
- Layout V2: Algunos iconos pueden tener áreas de pulsación solapadas.
- AutoScan (Smart v2): ⏸️ En estudio por defecto. Desde v5.0.11, en los menús de ingeniería (pulsación larga en GPS) puedes activar Modo AutoScan para usar el botón de escaneo en la UI principal de forma experimental (
pref_dev_autoscan_enableden RadioPresets). - Audio QS6 (Qualcomm / NWD): ⚠️ Comportamiento dependiente del firmware; se sigue probando cambio de fuente (
ACTION_CHANGE_SOURCE), foco y rutas de recuperación. Reporta modelo + build si falla el audio tras sintonizar.
📖 Documentación
- Manual de Usuario (Español)
- User Manual (English)
- Руководство пользователя (Русский)
- Compatibilidad de Hardware
- Compilación / CI — credenciales Supabase
- Ingeniería inversa — radio OEM K706 (
com.android.fmradio.ext) - Comparativa motor K706 OpenRadioFM vs radio OEM
- Inteligencia QS NWD (Qualcomm) — incluye §15 Roadmap motor QS6
- Changelog · Changelog (English)
- Depurado en tres fases
- Roadmap
🤝 Cómo Contribuir
- Issues: Si encuentras un bug o comportamiento raro en tu radio (modelo, firmware, chip, versión de app), abre un Issue detallando:
- Modelo exacto de la head unit (HCN, K706, QS6, MTK8259, etc.).
- Versión de OpenRadioFM (por ejemplo
v4.9.3_Stable). - Pasos para reproducir el problema y, si es posible, logs o fotos/vídeos.
- Pull Requests: Se aceptan mejoras de código, refactors y nuevas traducciones:
- Intenta mantener el estilo actual (Java para el core; Kotlin bienvenido para piezas nuevas).
- Acompaña los cambios con una breve explicación en el PR y, si afecta a la UX, con capturas.
- Para cambios grandes (refactor de motores, arquitectura, etc.), es recomendable comentar primero en un Issue para alinear el enfoque.
📜 Historial de Versiones
v5.0.16 (Abril 2026) — main — hotfix
- ES: OpenRadioFM v5.0.16 — hotfix: streaming MT8163, logos V3/QS6, volante QS6 en segundo plano, MediaSession/notificaciones,
RadioRepositoryen UI, HiHack tras reinicio. Pendiente verificación en K706 y MT8163. VerCHANGELOG.md. - EN: OpenRadioFM v5.0.16 — hotfix: MT8163 streaming, V3/QS6 logos, QS6 background steering, MediaSession/notifications, UI-thread
getStationInfo, HiHack reboot reminder. K706 + MT8163 verification still pending. SeeCHANGELOG_EN.md.
v5.0.15 (Abril 2026) — main
- ES: OpenRadioFM v5.0.15 — cierre de línea 5.0.15: widget, AutoScan/i18n/diálogos (ver
CHANGELOG.md); contribución Supabase más estricta; credenciales Supabase en compilación (local.properties); layout V2 presets. - EN: OpenRadioFM v5.0.15 — release notes: widget, AutoScan/i18n/dialogs (see
CHANGELOG_EN.md); stricter Supabase community contribution; build-time Supabase credentials; V2 preset column spacing.
v5.0.14 Beta (Marzo 2026) — main
- ES: OpenRadioFM v5.0.14 Beta — indicador de banda (FM1/FM2/FM3/AM1/AM2) y unidad (MHz/kHz) como texto para respetar la tipografía elegida; selector “🔢 Números presets” con estilo por defecto o Tabler (assets). Detalle en
CHANGELOG.md. - EN: OpenRadioFM v5.0.14 Beta — band indicator (FM1/FM2/FM3/AM1/AM2) and unit (MHz/kHz) rendered as text to respect the selected font; “🔢 Preset numbers” selector with Default or Tabler style (assets). See
CHANGELOG_EN.md.
v5.0.12 Beta (Marzo 2026) — main
- ES:
