На следующей диаграмме показаны компоненты, которые взаимодействуют с медиа:

Рисунок 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. Это означает, что никакие другие операции невозможны до завершения входа в систему.
