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

Агент Android — Эксплуатация

Жизненный цикл

Boot → MyReceiver (BOOT_COMPLETED) → AutoStartUp service → MainActivity
                                          │
                                          ▼
                                  Heartbeat на сервер
                                          │
                              ┌───────────┴────────────┐
                              ▼                        ▼
                     Сервер отвечает «0»      Нет интернета / не
                       (авторизовано)        авторизовано → повтор
                              │
                              ▼
                       PlayerActivity (fullscreen)
                              │
                              ▼
                Читает локальный playlist.txt
                              │
                              ▼
            Воспроизводит по кругу MP4 / JPG / PNG

Синхронизация контента

Фоновая служба AutoStartUp:

  1. Опрашивает сервер каждые N секунд (настраивается).
  2. Сравнивает список файлов на сервере с локальными.
  3. Скачивает отсутствующие или изменившиеся, проверяя целостность по CRC32. Когда файл скачан полностью, рядом с ним создаётся файл .ok.
  4. Перезаписывает playlist.txt (JSON) с текущим порядком и временем показа каждого элемента.
  5. Плеер перечитывает playlist.txt в начале каждого витка цикла — изменения применяются без перезапуска приложения.

Поддерживаемые форматы

Тип Подробности
Видео MP4 (H.264). Воспроизводится целиком на каждом витке.
Статичное изображение JPG, PNG. Время задаётся в playlist.
GIF Распознаётся, но пропускается (не воспроизводится).
Fallback Если контента нет, показывается изображение по умолчанию (sat.jpg).

Режимы отображения

Два layout на выбор в настройках Admin:

Отчёт о состоянии

При каждом heartbeat агент отправляет:

Именно эти значения вы видите в столбце Статус playlist панели.

Удалённые снимки экрана

В панели пункт Действия → Снимок экрана запускает снимок экрана устройства. Сервер добавляет флаг (screenshot:1) в следующий ответ gps (≤ 60 с); AutoStartUp обнаруживает его и передаёт задачу ScreenshotCapture.

Агент пробует три способа по порядку, от наиболее к наименее функциональному:

Способ 1 — AccessibilityService (рекомендуется, требует однократной настройки)

ScreenshotAccessibilityService — это системная служба, которая снимает весь экран устройства: включая system UI, другие приложения, диалоги ошибок / ANR, экран блокировки и, что особенно важно, диалог «приложение остановлено», если kiosk аварийно завершился. Она переживает сбои Activity / Service, потому что Android автоматически перезапускает привязки служб специальных возможностей.

Требования:

Если служба не включена, агент при запуске записывает в 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.

Способ 2 — Кадр воспроизводимого медиафайла (PlayerActivity)

Если AccessibilityService не активна и текущий режим — playlist, агент:

Это позволяет избежать проблемы чёрного прямоугольника, вызванной тем, что PixelCopy(Window) не может прочитать аппаратный overlay SurfaceView, в котором отрисовывается видео.

Способ 3 — PixelCopy окна (KioskBrowserActivity / резервный вариант)

Для режима Web (WebView, без аппаратного overlay) или как последнее средство: PixelCopy.request(Window, …) на API ≥ 26 — снимает WebView/Surface с аппаратным ускорением. View.draw(Canvas) на API 24-25.

Общее для всех трёх способов

Подробности процесса в панели.

Восстановление после сбоев

MyExceptionHandler перехватывает необработанные исключения и автоматически перезапускает приложение. Это гарантирует, что устройство вернётся к воспроизведению контента даже после разового сбоя.

Логи

Агент отправляет операционные логи на сервер. Чтобы посмотреть их в панели: Устройства → Действия → Логи.

Обновления

Сейчас APK проверяет наличие последней версии и, если она новее, скачивает новый APK с сервера (descarregar_apk.php). Точное поведение зависит от настроек производителя; в некоторых внедрениях обновление выполняется удалённо со стороны Promotienda.

Известные ограничения

Используемые HTTP-эндпоинты

Endpoint Назначение
suport/WebServiceTablet.php?accio=esticViu Heartbeat / авторизация
suport/WebServiceTablet.php?accio=estat&estat=N Отчёт о состоянии playlist
descarregar_apk.php Автообновление APK