Компоненты системы и пользовательские потоки

Компоненты, взаимодействующие с Media, описаны в таблице:

Компонент Описание
Главный экран Отображает другие элементы пользовательского интерфейса автомобиля, которые отображают и управляют воспроизводимым в данный момент медиаконтентом. В AOSP это главный экран, отображаемый при запуске системы. С этого экрана пользователи могут просмотреть подробную информацию о воспроизводимом медиафайле и выполнить ограниченный набор стандартных и пользовательских действий (например, воспроизведение и пауза).
Системный пользовательский интерфейс Предоставляет функциональность, включающую глобальные параметры навигации по пользовательскому интерфейсу, например, для перехода к разделу «Медиа».
Помощники Android предоставляет различные механизмы для взаимодействия приложений голосовых помощников с системой. Эти приложения могут взаимодействовать с источниками мультимедиа в фоновом режиме (например, воспроизводить песню в результате голосовой команды) или переходить к разделу «Мультимедиа» в активном режиме (например, когда приложению голосового помощника дается команда отобразить пользовательский интерфейс определенного источника мультимедиа).
Запуск приложений Все приложения Android запускаются из панели запуска приложений, включая медиаисточники. Медиаприложения могут отображать собственный селектор источников мультимедиа, дополняя или заменяя панель запуска приложений в качестве отправной точки для воспроизведения медиафайлов.
Google Play Store При использовании GAS пользователи находят и устанавливают новые приложения на свои устройства Android. Что касается медиафайлов, после установки приложений пользователи перенаправляются в раздел «Медиа», чтобы завершить процесс входа в систему или начать взаимодействие с приложением.
Менеджер медиасессий Системная служба Android, которая отслеживает и управляет медиасессиями из всех источников мультимедиа. Она предоставляет механизмы для обнаружения момента, когда источник мультимедиа становится активным . Медиаприложения и все другие приложения, отображающие воспроизводимый в данный момент источник мультимедиа (например, главный экран), используют Media Session Manager для обнаружения этих событий и соответствующего обновления пользовательского интерфейса. Источники мультимедиа взаимодействуют с Media Session Manager посредством API Media Session .
Радио Специализированное приложение для взаимодействия с радиооборудованием. Приложение осуществляет поиск радиостанций, быстро выбирает недавно обнаруженные станции и переключается между радиодиапазонами. Компоненты пользовательского интерфейса, общие для приложений «Радио» и «Медиа», позволяют пользователю переключаться между двумя режимами работы.
Двигатель, отвлекающий водителя Системная служба Android используется для наложения ограничений на пользовательский интерфейс в зависимости от состояния автомобиля во время движения. Для пользовательского интерфейса входа в систему и настроек медиаисточников (где управление экраном осуществляется непосредственно медиаисточниками) эта служба гарантирует, что небезопасный контент не будет отображаться, когда автомобиль находится в режиме движения. Производители автомобилей могут настраивать определение этих состояний и то, как система реагирует в этих ситуациях (например, отображая блокирующее экранное наложение).

Пользовательские сценарии

Запуск медиаприложения

Запуск медиафайлов должен осуществляться с использованием следующего неявного CAR_INTENT_ACTION_MEDIA_TEMPLATE . Этот интент может содержать следующую дополнительную информацию:

  • android.car.intent.extra.MEDIA_COMPONENT ( необязательно ). Строка extra, представляющая собой имя компонента MediaBrowserService в медиаприложении, к которому должен подключаться Media. Если не указано, Media отображает текущее выбранное медиаприложение. Этот интент используется в следующих точках входа:

    • Системный интерфейс. Используется для возврата к интерфейсу мультимедиа или для его первого использования. В этом случае указанный выше Intent будет использоваться без каких-либо дополнительных настроек, чтобы отобразить текущее выбранное приложение мультимедиа.

    • Главный экран, помощники и центр уведомлений. Пользователи могут перейти в раздел «Медиа», чтобы отобразить выбранное в данный момент медиаприложение. Во всех случаях срабатывает неявное намерение без дополнительных настроек.

    • Панель запуска приложений. Когда пользователи выбирают медиаприложение из панели запуска приложений, указанный выше интент включает дополнительный параметр CAR_EXTRA_MEDIA_COMPONENT , содержащий выбранное медиаприложение. Медиаприложение обозначает это как новое выбранное приложение и подключается к нему. Подробности см. в разделе ниже «Интеграция панели запуска приложений с медиаприложением».

Интеграция лаунчера приложений с медиафайлами

Приложениям для воспроизведения мультимедиа запрещено предоставлять какие-либо действия, помеченные категорией android.intent.category.LAUNCHER . В результате средство запуска приложений (или его эквивалент) должно реализовать специальную логику для интеграции с источниками мультимедиа:

  • Программа запуска приложений должна просканировать систему на наличие пакетов, реализующих MediaBrowserService.SERVICE_INTERFACE . Для таких пакетов программа запуска приложений получает значок службы, аналогичный тому, который используется для получения других действий.

  • Затем App Launcher объединяет эти пакеты с теми, которые реализуют действия android.intent.category.LAUNCHER . Если приложение предоставляет реализацию MediaBrowserService и действие запуска, приоритет отдается службе.

    На момент написания этой статьи ни одно приложение-источник мультимедиа не может предоставить возможность запуска приложения.

  • Пример такой логики можно найти в коде AOSP по адресу AppLauncherUtils#getAllLauncherApps() .

Процесс входа в систему и параметры настройки

В медиаприложениях может быть предусмотрена оптимизированная для автомобиля функция «Настройки». Такая функция может использоваться для реализации пользовательских сценариев, не поддерживаемых API Android Media, например:

  • Войти
  • Выход
  • Смена учетной записи
  • Отображает, к какой системе пользователь в данный момент авторизован (если таковая имеется).
  • конфигурация службы

Данное действие «Настройки» объявляется медиаприложением с использованием следующего фильтра намерений:

<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>

Средства массовой информации должны реализовать следующую логику:

  • Убедитесь, что выбранное в данный момент медиаприложение содержит действие с заданным фильтром намерений.

  • В таком случае предоставьте пользователю возможность перейти к нужному действию.

  • Если действуют ограничения на пользовательский интерфейс автомобиля (например, автомобиль движется), эту функцию следует отключить, поскольку раздел «Настройки» не является оптимизированным для водителя интерфейсом.

Обработка ошибок и необходимость входа в систему.

Взаимодействие медиаприложений с другими медиаприложениями осуществляется через API Android Media Session. В рамках этого API медиаприложение получает объект PlaybackState , который сообщает о текущем состоянии медиаприложения.

Процесс входа в систему начинается, когда медиаприложение изменяет PlaybackState на STATE_ERROR , включая определенный код ошибки (подробности см. ниже). В этом случае медиаприложение отображает описание ошибки и ссылку для перехода к действию входа в систему, реализованному медиаприложением.

Аналогичный алгоритм может использоваться приложениями для сигнализации о других ошибках (например, об ошибке подключения к серверу).

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