На следующей диаграмме показаны компоненты, которые взаимодействуют с медиа:
Рисунок 1. Компоненты системы
Элементы на этом рисунке описаны в таблице:
Компонент | Описание |
---|---|
Главный экран | Представляет другие поверхности пользовательского интерфейса автомобиля, которые отображают и управляют воспроизводимым в данный момент мультимедиа. В AOSP это главный экран, отображаемый при запуске системы. На этом экране пользователи могут просматривать сведения о воспроизводимом мультимедийном элементе и выполнять ограниченный набор стандартных и настраиваемых действий (например, «Воспроизведение» и «Пауза»). |
Системный интерфейс | Предоставляет функциональные возможности, включающие глобальные параметры навигации пользовательского интерфейса, например переход к медиафайлам. |
Ассистенты | Android предоставляет механизмы взаимодействия различных приложений голосового помощника с системой. Эти приложения могут взаимодействовать с источниками мультимедиа в фоновом режиме (например, воспроизводить песню в результате голосовой команды) или переходить к мультимедиа на переднем плане (например, когда приложению голосового помощника поручено отобразить пользовательский интерфейс конкретный медиа-источник). |
Панель запуска приложений | Все приложения Android запускаются в панели запуска приложений, включая источники мультимедиа. Медиа может предоставить собственный выбор источника мультимедиа, дополняя или заменяя средство запуска приложений в качестве отправной точки для мультимедиа. |
Google Play Маркет | При использовании GAS пользователи находят и устанавливают новые приложения на устройство Android. Что касается мультимедиа, после установки приложений пользователи перенаправляются к медиафайлу для завершения процесса входа или начала взаимодействия с приложением. |
Менеджер медиа-сессий | Системный сервис Android, который отслеживает и контролирует медиа-сессии из всех медиа-источников. Он предоставляет механизмы для обнаружения, когда источник мультимедиа становится источником мультимедиа переднего плана . Мультимедиа и все другие приложения, отображающие воспроизводимый в данный момент источник мультимедиа (например, главный экран), используют диспетчер медиасессий для обнаружения этих событий и соответствующего обновления пользовательского интерфейса. Медиа-источники взаимодействуют с Media Session Manager посредством Media Session API . |
Радио | Специализированное приложение для взаимодействия с радиооборудованием. Радио ищет радиостанции, быстро выбирает недавно обнаруженные станции и переключается между радиодиапазонами. Компоненты пользовательского интерфейса, общие для Radio и Media, позволяют пользователю переключаться между двумя вариантами. |
Двигатель отвлечения водителя | Системный сервис Android, используемый для наложения ограничений UX в зависимости от состояния вождения автомобиля. Для входа в систему и настроек пользовательского интерфейса медиа-источников (когда экран управляется непосредственно медиа-источниками) эта служба гарантирует, что небезопасный контент не будет отображаться, когда автомобиль находится в состоянии вождения. OEM-производители могут настроить определение этих состояний и реакцию системы в таких ситуациях (например, путем отображения наложения экрана блокировки). |
Пользовательские потоки
Запуск медиа-приложения
Процесс запуска Media показан ниже.
Рисунок 2. Запуск медиа-приложения
Носитель должен быть запущен с использованием следующего неявного CAR_INTENT_ACTION_MEDIA_TEMPLATE
. Это намерение может содержать следующую информацию в качестве дополнительной информации :
android.car.intent.extra.MEDIA_COMPONENT
( необязательно ). Дополнительная строка, представляющая сводное имя компонентаMediaBrowserService
в мультимедийном приложении, к которому должен подключаться носитель. Если этот параметр не указан, Media отображает выбранное в данный момент мультимедийное приложение. Это намерение используется из следующих точек входа:Системный интерфейс. Используется для возврата к возможностям мультимедиа или для первого их использования. В этом случае указанное выше намерение будет использоваться без каких-либо дополнений, чтобы заставить Media отображать выбранное в данный момент мультимедийное приложение.
Главный экран, помощники и центр уведомлений. Пользователи могут перейти к разделу «Медиа», чтобы отобразить выбранное в данный момент мультимедийное приложение. Во всех случаях срабатывает неявный Intent без дополнений.
Панель запуска приложений. Когда пользователи выбирают мультимедийное приложение в панели запуска приложений, указанное выше намерение включает в себя дополнительный элемент
CAR_EXTRA_MEDIA_COMPONENT
, который содержит выбранное мультимедийное приложение. Media обозначает его как вновь выбранное приложение и подключается к нему. Подробную информацию см. в разделе ниже «Интеграция средства запуска приложений с медиа».
Панель запуска приложений для интеграции с медиа
Медиа-приложениям не разрешается выполнять какие-либо действия, отмеченные категорией android.intent.category.LAUNCHER
. В результате средство запуска приложений (или его эквивалент) должно реализовать специальную логику для интеграции медиа-источников:
Средство запуска приложений должно сканировать систему на наличие пакетов, реализующих
MediaBrowserService.SERVICE_INTERFACE
. Для этих пакетов средство запуска приложений извлекает значок службы, аналогичный тому, который используется для получения других действий.Затем App Launcher объединяет эти пакеты с пакетами, реализующими действия
android.intent.category.LAUNCHER
. Если приложение предоставляет реализациюMediaBrowserService
и действие средства запуска, служба имеет приоритет.На момент написания этой статьи ни одно приложение-источник мультимедиа не могло обеспечить активность запуска.
- Пример этой логики можно найти в коде AOSP по адресу
AppLauncherUtils#getAllLauncherApps()
.
Порядок входа и параметры конфигурации
Медиа-приложения могут включать в себя действие настроек, оптимизированное для автомобиля. Такое действие можно использовать для реализации пользовательских потоков, не обрабатываемых API-интерфейсами Android Media, например:
- Войти
- Выход
- Смена аккаунта
- Отображение, на котором в данный момент авторизован пользователь (если есть)
- Конфигурация сервиса
Рисунок 3. Процесс входа в систему
Это действие настроек объявляется мультимедийным приложением со следующим фильтром намерений:
<activity android:name=".AppSettingsActivity" android:exported="true android:theme="@style/SettingsActivity" android:label="@string/app_settings_activity_title"> <intent-filter> <action android:name="android.intent.action.APPLICATION_PREFERENCES"/> </intent-filter> </activity>
СМИ должны реализовать следующую логику:
Убедитесь, что выбранное в данный момент медиа-приложение включает в себя действие с данным фильтром намерений.
Если да, разрешите пользователю перейти к действию.
Если действуют ограничения пользовательского интерфейса автомобиля (например, автомобиль движется), эту возможность следует отключить, поскольку действие «Настройки» не является пользовательским интерфейсом, оптимизированным для водителя.
Обработка ошибок и обязательный вход в систему
Медиа взаимодействует с мультимедийными приложениями через Android Media Session API. В рамках этого API Media получает объект PlaybackState
, который сообщает текущее состояние мультимедийного приложения.
Процесс входа начинается, когда мультимедийное приложение меняет PlaybackState
на STATE_ERROR
, включая определенный код ошибки (подробности см. ниже). Когда это происходит, Media отображает описание ошибки и возможность перехода к действию входа, реализованному мультимедийным приложением.
Этот же поток может использоваться приложениями для сигнализации о других ошибочных ситуациях (например, об ошибке подключения к серверу).
Рисунок 4. Обработка ошибок
В рамках обычной обработки ошибок PlaybackState
Media должен проверить следующие входные данные.
Код ошибки
PlaybackState
равенPlaybackStateCompat#ERROR_CODE_AUTHENTICATION_EXPIRED
. Это сигнализирует о том, что мультимедийному приложению требуется вход в систему для продолжения работы. Могут быть получены другие коды ошибок, которые будут указывать на другие типы ошибочных ситуаций.Сообщение об ошибке
PlaybackState
(задаваемое мультимедийными приложениями с помощью методаPlaybackStateCompat.Builder#setErrorMessage
) содержит удобочитаемое объяснение (например, «Вы не вошли в систему»). Это сообщение должно отображаться пользователю и должно быть оптимизировано для отвлечения внимания от вождения (DO).При необходимости
PlaybackState
может включать следующие дополнительные функции (устанавливаемые мультимедийными приложениями с помощью методаPlaybackStateCompat.Builder#setExtras
) со следующими ключами.android.media.extras.ERROR_RESOLUTION_ACTION_LABEL
. Установите строку, содержащую удобочитаемое сообщение, которое будет отображаться на кнопке, на которую нажал пользователь, чтобы начать процесс входа в систему.android.media.extras.ERROR_RESOLUTION_ACTION_INTENT
. УстановитеPendingIntent
который будет срабатывать, когда пользователь нажимает на вышеупомянутую кнопку. ЭтотPendingIntent
указывает на пользовательское действие входа, реализованное тем же мультимедийным приложением.
Состояние
PlaybackState
равноSTATE_ERROR
. Это означает, что никакие другие операции невозможны до завершения входа в систему.