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

Agente Android — Funzionamento

Ciclo di vita

Boot → MyReceiver (BOOT_COMPLETED) → AutoStartUp service → MainActivity
                                          │
                                          ▼
                                 Heartbeat al server
                                          │
                              ┌───────────┴────────────┐
                              ▼                        ▼
                    Il server risponde "0"    Senza internet / non
                        (autorizzato)         autorizzato → nuovo tentativo
                              │
                              ▼
                       PlayerActivity (fullscreen)
                              │
                              ▼
                    Legge playlist.txt locale
                              │
                              ▼
                Riproduce in loop MP4 / JPG / PNG

Sincronizzazione dei contenuti

Il servizio in background AutoStartUp:

  1. Esegue il polling del server ogni N secondi (configurabile).
  2. Confronta l'elenco dei file del server con quelli locali.
  3. Scarica quelli mancanti o modificati, verificandone l'integrità con CRC32. Quando un file è scaricato per intero, accanto ad esso viene creato un file .ok.
  4. Riscrive playlist.txt (JSON) con l'ordine attuale e le durate dei singoli elementi.
  5. Il player rilegge playlist.txt all'inizio di ogni giro di loop — le modifiche si applicano senza riavviare l'app.

Formati supportati

Tipo Dettagli
Video MP4 (H.264). Viene riprodotto per intero a ogni giro.
Immagine statica JPG, PNG. Durata configurata nella playlist.
GIF Rilevato ma ignorato (non viene riprodotto).
Fallback Se non è disponibile alcun contenuto, mostra un'immagine predefinita (sat.jpg).

Modalità di visualizzazione

Due layout selezionabili dalle impostazioni Admin:

Report di stato

A ogni heartbeat l'agente invia:

Questi sono i valori che vede nella colonna Stato playlist del pannello.

Screenshot remoti

Dal pannello, Azioni → Screenshot avvia un'acquisizione della schermata del dispositivo. Il server inserisce un flag (screenshot:1) nella risposta gps successiva (≤ 60 s); AutoStartUp lo rileva e delega a ScreenshotCapture.

L'agente tenta tre vie in ordine, dalla più alla meno capace:

Via 1 — AccessibilityService (consigliata, richiede una configurazione una tantum)

ScreenshotAccessibilityService è un servizio di sistema che cattura l'intera schermata del dispositivo — comprese la system UI, altre app, finestre di errore / ANR, la lockscreen e, soprattutto, la finestra "app crashed" se il kiosk è andato in crash. Sopravvive ai crash dell'Activity / del Service perché Android riavvia automaticamente i binding di accessibilità.

Requisiti:

Se il servizio non è abilitato, all'avvio l'agente registra in agent.log:

[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 contenuto in riproduzione (PlayerActivity)

Se l'AccessibilityService non è attivo e la modalità attiva è playlist, l'agente:

Questo evita il problema del rettangolo nero causato da PixelCopy(Window), che non riesce a leggere l'overlay hardware del SurfaceView su cui viene renderizzato il video.

Via 3 — PixelCopy della finestra (KioskBrowserActivity / fallback)

Per la modalità Web (WebView, senza overlay hardware) o come ultima risorsa: PixelCopy.request(Window, …) su API ≥ 26 — cattura WebView/Surface accelerati dalla GPU. View.draw(Canvas) su API 24-25.

Comune alle tre vie

Dettaglio del flusso nel pannello.

Crash recovery

MyExceptionHandler intercetta le eccezioni non gestite e riavvia automaticamente l'app. Questo garantisce che il dispositivo torni a riprodurre i contenuti anche dopo un guasto occasionale.

Log

L'agente invia i log operativi al server. Per consultarli dal pannello: Dispositivi → Azioni → Logs.

Aggiornamenti

Attualmente l'APK controlla la versione più recente e, se ne esiste una nuova, scarica il nuovo APK dal server (descarregar_apk.php). Il comportamento esatto dipende dalla configurazione del produttore; in alcune installazioni l'aggiornamento viene eseguito da remoto da Promotienda.

Limitazioni note

Endpoint HTTP utilizzati

Endpoint Funzione
suport/WebServiceTablet.php?accio=esticViu Heartbeat / auth
suport/WebServiceTablet.php?accio=estat&estat=N Report dello stato della playlist
descarregar_apk.php Auto-update dell'APK