Files
pluriwave/docs/alarmas-pantalla-apagada.md
T
FreeTLab 3ab138a4fa
Build & Deploy Pluriwave / Análisis de código (push) Successful in 26s
Build & Deploy Pluriwave / Build APK + AAB release (push) Successful in 2m8s
feat(alarms): add native ringing service
2026-05-22 20:02:27 +02:00

1.8 KiB

Arquitectura de alarmas con pantalla apagada

Diagnóstico

El flujo anterior hacía que Android recibiese la alarma con AlarmManager, pero el sonido real dependía de que se abriese MainActivity y de que Flutter llegase a pintar PantallaAlarmaSonando. Con pantalla apagada, Doze o restricciones del fabricante, ese arranque de UI puede retrasarse hasta que el usuario enciende la pantalla.

Decisión

La alarma debe sonar desde Android nativo en cuanto llega ACTION_FIRE. Flutter pasa a ser la interfaz de control para detener, posponer y hacer handoff a la radio de la app, pero no el único origen del sonido.

Flujo recomendado

  1. AlarmScheduler programa la alarma con setAlarmClock y fallback exact/inexact.
  2. PluriWaveAlarmReceiver recibe ACTION_FIRE.
  3. El receiver arranca PluriWaveAlarmService como foreground service.
  4. El servicio toma un PARTIAL_WAKE_LOCK, muestra notificación foreground y reproduce audio con USAGE_ALARM.
  5. La UI Flutter se abre por full-screen intent si Android lo permite.
  6. Al detener/posponer desde Flutter, se manda comando nativo para parar el servicio.

Referencias

Notas

  • El audio local interno es el fallback más fiable para pantalla apagada.
  • La radio remota puede fallar por red, DNS, TLS o timeout; por eso debe existir fallback interno.
  • Si un fabricante bloquea incluso servicios arrancados desde alarma, habrá que guiar al usuario con permisos de batería/autostart.