RDS
Digital Signage RDS — Documentación
ES EN CA FR PT

Agent Android — Operació

Cicle de vida

Boot → MyReceiver (BOOT_COMPLETED) → AutoStartUp service → MainActivity
                                          │
                                          ▼
                                 Heartbeat al servidor
                                          │
                              ┌───────────┴────────────┐
                              ▼                        ▼
                  Servidor respon "0"          Sense internet / no
                       (autoritzat)            autoritzat → reintent
                              │
                              ▼
                       PlayerActivity (fullscreen)
                              │
                              ▼
                     Llegeix playlist.txt local
                              │
                              ▼
                Reprodueix en bucle MP4 / JPG / PNG

Sincronització de continguts

El servei en segon pla AutoStartUp:

  1. Fa polling al servidor cada N segons (configurable).
  2. Compara la llista d'arxius del servidor amb els locals.
  3. Descarrega els que faltin o hagin canviat, verificant integritat amb CRC32. Quan un arxiu es baixa complet es crea al costat un fitxer .ok.
  4. Reescriu playlist.txt (JSON) amb l'ordre actual i els temps per element.
  5. El player rellegeix playlist.txt a l'inici de cada volta de bucle — els canvis s'apliquen sense reiniciar l'app.

Formats suportats

Tipus Detalls
Vídeo MP4 (H.264). Es reprodueix complet a cada volta.
Imatge estàtica JPG, PNG. Temps configurat a la playlist.
GIF Detectat però omès (no es reprodueix).
Fallback Si no hi ha contingut disponible, mostra una imatge per defecte (sat.jpg).

Modes de visualització

Dos layouts seleccionables des dels ajustaments Admin:

Reporte d'estat

A cada heartbeat l'agent envia:

Aquests valors són els que veus a la columna Estat playlist del panell.

Captures de pantalla remotes

Des del panell, Accions → Captura de pantalla dispara una captura del dispositiu. El servidor injecta un flag (screenshot:1) a la següent resposta gps (≤ 60 s); AutoStartUp ho detecta i delega a ScreenshotCapture.

L'agent intenta tres vies en ordre, de més a menys capaç:

Via 1 — AccessibilityService (recomanat, requereix setup únic)

ScreenshotAccessibilityService és un servei del sistema que captura tota la pantalla del dispositiu — inclou system UI, altres apps, diàlegs d'error / ANR, lockscreen i, crucialment, el diàleg "app crashed" si el kiosk ha caigut. Sobreviu a caigudes de l'Activity / Service perquè Android reinicia automàticament els bindings d'accessibilitat.

Requisits:

Si el servei no està habilitat, l'agent registra a agent.log en arrencar:

[SCREENSHOT] Full-screen captures disabled — enable 'Digital Signage RDS' in
              Settings → Accessibility for captures that work even when the
              kiosk app is not foreground.

Via 2 — Frame del media en reproducció (PlayerActivity)

Si l'AccessibilityService no està actiu i el mode actiu és playlist, l'agent:

Això evita el problema del rectangle negre causat per PixelCopy(Window) que no pot llegir l'overlay hardware del SurfaceView on es renderitza el vídeo.

Via 3 — PixelCopy de la finestra (KioskBrowserActivity / fallback)

Per al mode Web (WebView, sense overlay hardware) o com a últim recurs: PixelCopy.request(Window, …) en API ≥ 26 — captura WebView/Surface accelerats per GPU. View.draw(Canvas) en API 24-25.

Comú a les tres vies

Detall del flux al panell.

Crash recovery

MyExceptionHandler captura excepcions no gestionades i reinicia l'app automàticament. Això assegura que el dispositiu torni a reproduir contingut fins i tot després d'una fallada puntual.

Logs

L'agent envia logs operatius al servidor. Per veure'ls des del panell: Dispositius → Accions → Logs.

Actualitzacions

L'APK actualment comprova la versió més recent i, si n'hi ha una de nova, descarrega el nou APK des del servidor (descarregar_apk.php). El comportament exacte depèn de la configuració del fabricant; en alguns desplegaments l'actualització es fa remotament des de Promotienda.

Limitacions conegudes

Endpoints HTTP usats

Endpoint Funció
suport/WebServiceTablet.php?accio=esticViu Heartbeat / auth
suport/WebServiceTablet.php?accio=estat&estat=N Reporte d'estat de la playlist
descarregar_apk.php Auto-update de l'APK