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

Android-Agent — Betrieb

Lebenszyklus

Boot → MyReceiver (BOOT_COMPLETED) → AutoStartUp service → MainActivity
                                          │
                                          ▼
                               Heartbeat an den Server
                                          │
                              ┌───────────┴────────────┐
                              ▼                        ▼
                    Server antwortet "0"     Kein Internet / nicht
                       (autorisiert)       autorisiert → Neuversuch
                              │
                              ▼
                       PlayerActivity (fullscreen)
                              │
                              ▼
                      Liest lokale playlist.txt
                              │
                              ▼
            Spielt MP4 / JPG / PNG in Schleife ab

Synchronisierung der Inhalte

Der Hintergrunddienst AutoStartUp:

  1. Fragt den Server alle N Sekunden ab (konfigurierbar).
  2. Vergleicht die Dateiliste des Servers mit den lokalen Dateien.
  3. Lädt fehlende oder geänderte Dateien herunter und prüft die Integrität per CRC32. Sobald eine Datei vollständig geladen ist, wird daneben eine .ok-Datei angelegt.
  4. Schreibt playlist.txt (JSON) mit der aktuellen Reihenfolge und den Zeiten je Element neu.
  5. Der Player liest playlist.txt zu Beginn jeder Schleifenrunde neu ein — Änderungen greifen ohne Neustart der App.

Unterstützte Formate

Typ Details
Video MP4 (H.264). Wird in jeder Runde vollständig wiedergegeben.
Standbild JPG, PNG. Anzeigedauer in der Playlist konfiguriert.
GIF Wird erkannt, aber übersprungen (keine Wiedergabe).
Fallback Ist kein Inhalt verfügbar, wird ein Standardbild angezeigt (sat.jpg).

Anzeigemodi

Zwei Layouts, wählbar in den Admin-Einstellungen:

Statusmeldung

Bei jedem Heartbeat sendet der Agent:

Diese Werte sehen Sie in der Spalte Playlist-Status im Panel.

Remote-Screenshots

Über Aktionen → Screenshot im Panel lösen Sie eine Aufnahme des Geräts aus. Der Server hängt der nächsten gps-Antwort ein Flag (screenshot:1) an (≤ 60 s); AutoStartUp erkennt es und delegiert an ScreenshotCapture.

Der Agent versucht drei Wege in dieser Reihenfolge, vom leistungsfähigsten zum einfachsten:

Weg 1 — AccessibilityService (empfohlen, einmalige Einrichtung nötig)

ScreenshotAccessibilityService ist ein Systemdienst, der den gesamten Bildschirm des Geräts aufnimmt — inklusive System-UI, anderer Apps, Fehler-/ANR-Dialogen, Sperrbildschirm und, entscheidend, dem Dialog "app crashed", falls der Kiosk abgestürzt ist. Er übersteht Abstürze der Activity / des Service, weil Android die Bindings der Bedienungshilfen automatisch neu aufbaut.

Voraussetzungen:

Ist der Dienst nicht aktiviert, protokolliert der Agent beim Start 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.

Weg 2 — Frame des laufenden Mediums (PlayerActivity)

Ist der AccessibilityService nicht aktiv und der aktive Modus playlist, geht der Agent so vor:

Damit wird das Problem des schwarzen Rechtecks umgangen, das durch PixelCopy(Window) entsteht, weil damit das Hardware-Overlay der SurfaceView, in der das Video gerendert wird, nicht ausgelesen werden kann.

Weg 3 — PixelCopy des Fensters (KioskBrowserActivity / Fallback)

Für den Web-Modus (WebView, ohne Hardware-Overlay) oder als letzte Möglichkeit: PixelCopy.request(Window, …) ab API 26 — nimmt GPU-beschleunigte WebView/Surface auf. View.draw(Canvas) bei API 24-25.

Allen drei Wegen gemeinsam

Details zum Ablauf im Panel.

Crash Recovery

MyExceptionHandler fängt unbehandelte Ausnahmen ab und startet die App automatisch neu. So gibt das Gerät auch nach einem einzelnen Fehler wieder Inhalte wieder.

Logs

Der Agent sendet Betriebs-Logs an den Server. Zum Ansehen im Panel: Geräte → Aktionen → Logs.

Updates

Das APK prüft derzeit auf die neueste Version und lädt bei Bedarf das neue APK vom Server herunter (descarregar_apk.php). Das genaue Verhalten hängt von der Konfiguration des Herstellers ab; in manchen Installationen erfolgt die Aktualisierung per Fernzugriff durch Promotienda.

Bekannte Einschränkungen

Verwendete HTTP-Endpoints

Endpoint Funktion
suport/WebServiceTablet.php?accio=esticViu Heartbeat / Auth
suport/WebServiceTablet.php?accio=estat&estat=N Statusmeldung der Playlist
descarregar_apk.php Auto-Update des APK