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

Agent Android — Exploitation

Cycle de vie

Boot → MyReceiver (BOOT_COMPLETED) → AutoStartUp service → MainActivity
                                          │
                                          ▼
                                 Heartbeat au serveur
                                          │
                              ┌───────────┴────────────┐
                              ▼                        ▼
                  Serveur répond "0"            Pas d'internet / non
                       (autorisé)              autorisé → réessai
                              │
                              ▼
                       PlayerActivity (plein écran)
                              │
                              ▼
                     Lit playlist.txt local
                              │
                              ▼
                Boucle MP4 / JPG / PNG

Synchronisation des contenus

Le service en arrière-plan AutoStartUp :

  1. Sonde le serveur toutes les N secondes (configurable).
  2. Compare la liste de fichiers du serveur avec celle en local.
  3. Télécharge ceux qui manquent ou ont changé, en vérifiant l'intégrité par CRC32. Lorsqu'un fichier est entièrement téléchargé, un fichier compagnon .ok est créé à côté.
  4. Réécrit playlist.txt (JSON) avec l'ordre actuel et les durées par élément.
  5. Le lecteur relit playlist.txt au début de chaque tour de boucle — les changements s'appliquent sans redémarrer l'app.

Formats supportés

Type Détails
Vidéo MP4 (H.264). Joue intégralement à chaque tour.
Image statique JPG, PNG. Durée configurée dans la playlist.
GIF Détecté mais omis (non joué).
Fallback Si aucun contenu n'est disponible, affiche une image par défaut (sat.jpg).

Modes d'affichage

Deux layouts sélectionnables depuis les paramètres Admin :

Rapport d'état

À chaque heartbeat l'agent envoie :

Ces valeurs sont celles affichées dans la colonne État playlist du panneau.

Captures d'écran distantes

Depuis le panneau, Actions → Capture d'écran déclenche une capture de l'appareil. Le serveur injecte un drapeau (screenshot:1) dans la prochaine réponse gps (≤ 60 s) ; AutoStartUp le détecte et délègue à ScreenshotCapture.

L'agent essaie trois voies dans l'ordre, de la plus à la moins capable :

Voie 1 — AccessibilityService (recommandé, setup unique requis)

ScreenshotAccessibilityService est un service système qui capture tout l'écran de l'appareil — inclut l'UI système, autres apps, dialogues d'erreur / ANR, lockscreen et, surtout, le dialogue "app crashed" si le kiosk a planté. Survit aux crashs d'Activity / Service car Android relance automatiquement les bindings d'accessibilité.

Exigences :

Si le service n'est pas activé, l'agent enregistre dans agent.log au démarrage :

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

Voie 2 — Frame du média en lecture (PlayerActivity)

Si l'AccessibilityService n'est pas actif et que le mode actif est playlist, l'agent :

Cela évite le problème du rectangle noir causé par PixelCopy(Window) qui ne peut pas lire l'overlay matériel du SurfaceView où la vidéo est rendue.

Voie 3 — PixelCopy de la fenêtre (KioskBrowserActivity / fallback)

Pour le mode Web (WebView, sans overlay matériel) ou en dernier recours : PixelCopy.request(Window, …) sur API ≥ 26 — capture WebView/Surface accélérés par GPU. View.draw(Canvas) sur API 24-25.

Commun aux trois voies

Détail du flux dans le panneau.

Crash recovery

MyExceptionHandler capture les exceptions non gérées et redémarre l'app automatiquement. Cela garantit que l'appareil reprend la lecture du contenu même après une défaillance ponctuelle.

Logs

L'agent envoie des logs opérationnels au serveur. Pour les voir depuis le panneau : Appareils → Actions → Logs.

Mises à jour

Depuis la version 2.0.0, l'agent se met à jour depuis RDS : dans Panneau de l'appareil → Version de l'agent, choisissez la version et appuyez sur Enregistrer la version cible ; l'écran la télécharge et l'installe à sa prochaine connexion. Détail.

Sur Android, l'installation n'est automatique que sur les appareils rootés. Sur les autres (tablettes, téléphones et téléviseurs non rootés), Android affiche sa fenêtre d'installation par-dessus le contenu et quelqu'un devant l'écran doit appuyer sur Installer. Sous Android 8 ou supérieur, il faut d'abord autoriser Installer des applis inconnues pour Digital Signage RDS dans les paramètres d'Android. Si l'installation est refusée ou échoue, elle n'est pas retentée tant que vous ne choisissez pas une autre version cible.

Les versions antérieures à 2.0.0 ne se mettent pas à jour à distance : installez à la main l'APK le plus récent depuis Téléchargements.

Rapports de lecture et d'appuis

Les données se consultent dans Analytics.

Limitations connues

Endpoints HTTP utilisés

Endpoint Fonction
suport/WebServiceTablet.php?accio=esticViu Heartbeat / auth
suport/WebServiceTablet.php?accio=estat&estat=N Rapport d'état de la playlist
descarregar_apk.php Auto-update de l'APK