На следующей диаграмме показаны компоненты, взаимодействующие с Media.
Рисунок 1. Компоненты системы
Элементы на этом рисунке описаны ниже:
Составная часть | Описание |
---|---|
Домашний экран | Представляет другие поверхности в пользовательском интерфейсе автомобиля, которые отображают и управляют воспроизводимым в данный момент мультимедиа. В AOSP это главный экран, отображаемый при запуске системы. На этом экране пользователи могут просматривать сведения о воспроизводимом мультимедийном элементе и выполнять ограниченный набор стандартных и настраиваемых действий (например, «Воспроизведение» и «Пауза»). |
Системный интерфейс | Предоставляет функциональные возможности, включающие глобальные параметры навигации пользовательского интерфейса, такие как переход к мультимедиа. |
Ассистенты | Android предоставляет механизмы для взаимодействия различных приложений голосового помощника с системой. Эти приложения могут взаимодействовать с источниками мультимедиа в фоновом режиме (например, воспроизводить песню в результате голосовой команды) или переходить к источникам мультимедиа на переднем плане (например, когда приложению голосового помощника предписывается отображать пользовательский интерфейс конкретный медиа-источник). |
Средство запуска приложений | Все приложения Android запускаются в панели запуска приложений, включая источники мультимедиа. Медиа может представить свой собственный селектор источника мультимедиа, дополняя или заменяя средство запуска приложений в качестве начального места для мультимедиа. |
Google Play магазин | Когда используется GAS, именно здесь пользователи находят и устанавливают новые приложения на устройстве Android. Что касается мультимедиа, то после установки приложений пользователи перенаправляются на мультимедиа, чтобы завершить процесс входа или начать взаимодействие с приложением. |
Диспетчер медиасессий | Системный сервис Android, который отслеживает и контролирует сеансы мультимедиа из всех источников мультимедиа. Он предоставляет механизмы для обнаружения того, когда источник мультимедиа становится источником мультимедиа переднего плана . Мультимедиа и все другие приложения, отображающие воспроизводимый в данный момент источник мультимедиа (например, главный экран), используют диспетчер сеансов мультимедиа для обнаружения этих событий и соответствующего обновления пользовательского интерфейса. Медиа-источники взаимодействуют с Media Session Manager посредством Media Session API . |
Радио | Специализированное приложение для взаимодействия с радиоаппаратурой. Радио ищет радиостанции, быстро выбирая недавно обнаруженные станции и переключаясь между радиодиапазонами. Компоненты пользовательского интерфейса, используемые как Radio, так и Media, позволяют пользователю переключаться между двумя функциями. |
Двигатель отвлечения внимания водителя | Системный сервис Android, используемый для наложения ограничений UX в зависимости от состояния вождения автомобиля. Для входа в медиа-источники и настройки UX (где экран управляется непосредственно медиа-источниками) эта служба гарантирует, что небезопасный контент не будет отображаться, когда автомобиль находится в состоянии вождения. OEM-производители могут настроить определение этих состояний и то, как система реагирует в этих ситуациях (например, отображая блокирующий экран). |
Потоки пользователей
Запуск медиа-приложения
Ниже показан процесс запуска Media.
Рис. 2. Запуск медиа-приложения
Носитель должен быть запущен с использованием следующего неявного CAR_INTENT_ACTION_MEDIA_TEMPLATE . Это намерение может иметь следующую информацию в качестве дополнений :
android.car.intent.extra.MEDIA_COMPONENT
( необязательно ). Дополнительная строка, представляющая сведенное имя компонента MediaBrowserService в мультимедийном приложении, к которому должен подключаться мультимедиа. Если не указано, Media отображает текущее выбранное мультимедийное приложение. Это намерение используется из следующих точек входа:Системный интерфейс. Используется для возврата к работе с мультимедиа или для начала его использования в первый раз. В этом случае вышеупомянутый Intent будет использоваться без каких-либо дополнений, чтобы заставить Media отображать текущее выбранное мультимедийное приложение.
Главный экран, помощники и центр уведомлений. Пользователи могут перейти к разделу «Медиа», чтобы отобразить выбранное в данный момент мультимедийное приложение. Во всех случаях срабатывает неявный Intent без дополнений.
Средство запуска приложений. Когда пользователи выбирают мультимедийное приложение из панели запуска приложений, указанное выше намерение включает дополнительный элемент CAR_EXTRA_MEDIA_COMPONENT , который содержит выбранное мультимедийное приложение. Media определяет это как новое выбранное приложение и подключается к нему. Дополнительные сведения см. в разделе ниже «Интеграция средства запуска приложений с мультимедиа».
Средство запуска приложений для интеграции с медиа
Медиа-приложениям не разрешается предоставлять какие-либо действия, аннотированные категорией android.intent.category.LAUNCHER
. В результате средство запуска приложений (или его эквивалент) должно реализовывать специальную логику для интеграции источников мультимедиа:
Средство запуска приложений должно сканировать систему на наличие пакетов, реализующих
MediaBrowserService.SERVICE_INTERFACE
. Для этих пакетов Средство запуска приложений получает значок службы, аналогичный тому, который используется для получения других действий.Затем средство запуска приложений объединяет эти пакеты с теми, которые реализуют действия
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>
СМИ должны реализовать следующую логику:
Убедитесь, что текущее выбранное мультимедийное приложение включает действие с заданным фильтром намерений.
Если это так, разрешите пользователю перейти к действию.
Если действуют ограничения Car UX (например, автомобиль движется), эту возможность следует отключить, поскольку действие настроек не является пользовательским интерфейсом, оптимизированным для драйверов.
Обработка ошибок и обязательный вход
Мультимедиа взаимодействует с мультимедийными приложениями через 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). Подробнее см. в разделе Ограничения на вождение UX.Дополнительно
PlaybackState
может включать следующие дополнительные функции (установленные мультимедийными приложениями с помощью метода PlaybackStateCompat.Builder#setExtras ) со следующими ключами.android.media.extras.ERROR_RESOLUTION_ACTION_LABEL
. Задайте строку, содержащую удобочитаемое сообщение, которое будет отображаться на кнопке, которую коснулся пользователь, чтобы запустить процесс входа.android.media.extras.ERROR_RESOLUTION_ACTION_INTENT
. Установите PendingIntent , который будет запускаться, когда пользователь нажимает на вышеупомянутую кнопку. ЭтотPendingIntent
указывает на пользовательское действие входа, реализованное тем же медиа-приложением.
Состояние
PlaybackState
равно STATE_ERROR . Это означает, что никакие другие операции невозможны, пока вход не будет завершен.