Создайте шаблонное медиа-приложение

Шаблонные медиа-приложения находятся в стадии бета-тестирования
В настоящее время любой желающий может публиковать шаблонные медиа-приложения для внутреннего тестирования и закрытого тестирования в Play Store. Публикация в открытых и производственных треках будет разрешена позднее.

Медиаприложения, использующие шаблоны библиотеки автомобильных приложений, могут настраивать просмотр и воспроизведение мультимедиа, гарантируя при этом оптимизацию для экранов автомобиля и сводя к минимуму отвлекающие факторы во время вождения.

В этом руководстве предполагается, что у вас уже есть медиа-приложение, воспроизводящее аудио на телефоне, и что ваше медиа-приложение соответствует архитектуре медиа-приложений Android . Библиотека автомобильных приложений дает вам возможность заменить интерфейс приложения шаблонами, а не теми, которые созданы с использованием структуры данных MediaBrowser Build media apps for cars . Вам по-прежнему необходимо предоставить MediaSession для управления воспроизведением и MediaBrowserService , который используется для рекомендаций и других интеллектуальных интерфейсов.

Настройте манифест вашего приложения

В дополнение к шагам, описанным в разделе Использование библиотеки приложений Android for Cars , для шаблонных медиа-приложений требуется следующее:

Укажите поддержку категории в вашем манифесте

Вашему приложению необходимо объявить категорию автомобильного приложения androidx.car.app.category.MEDIA в фильтре намерений CarAppService .

<application>
    ...
   <service
       ...
        android:name=".MyCarAppService"
        android:exported="true">
      <intent-filter>
        <action android:name="androidx.car.app.CarAppService" />
        <category android:name="androidx.car.app.category.MEDIA"/>
      </intent-filter>
    </service>
    ...
<application>

Чтобы получить доступ к MediaPlaybackTemplate , вашему приложению также необходимо объявить разрешение androidx.car.app.MEDIA_TEMPLATES в своем файле манифеста:

<manifest ...>
  ...
  <uses-permission android:name="androidx.car.app.MEDIA_TEMPLATES"/>
  ...
</manifest>

Установите минимальный уровень API автомобильного приложения

Медиаприложения, использующие MediaPlaybackTemplate , поддерживаются только в CAL API 8. Убедитесь, что минимальный Car App API level установлен на 8.

<application ...>
  ...
  <meta-data
    android:name="androidx.car.app.minCarApiLevel"
    android:value="8"/>
  ...
</application>

Объявить о поддержке Android Auto

Убедитесь, что в манифест вашего приложения включено следующее:

<application>
  ...
  <meta-data android:name="com.google.android.gms.car.application"
      android:resource="@xml/automotive_app_desc"/>
  ...
</application>

Затем добавьте объявление шаблона в automotive_app_desc.xml в ваших xml-ресурсах. Это должно выглядеть следующим образом:

<automotiveApp xmlns:android="http://schemas.android.com/apk/res/android">
 <uses name="media"/>
 <uses name="template"/>
</automotiveApp>

Укажите значок атрибуции

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

Поддержка голосовых команд

Включите голосовое управление в своем приложении, чтобы пользователи могли выполнять общие действия без помощи рук. Более подробные инструкции по внедрению см. в разделе Поддержка голосовых действий для мультимедиа . При использовании шаблонного мультимедийного приложения, если вы получаете голосовую команду, вам не нужно обновлять MediaBrowserService результатами поиска. Вместо этого рассмотрите возможность добавления действия в шаблон воспроизведения мультимедиа, чтобы позволить пользователю находить больше контента на основе этого воспроизведения или поискового запроса. Поддержка голосовых команд необходима для соответствия рекомендациям по качеству VC-1 .

Создайте свой шаблон воспроизведения

MediaPlaybackTemplate отображает информацию о воспроизведении мультимедиа в вашем медиа-приложении Car App Library. Этот шаблон позволяет задать заголовок с названием и настраиваемыми действиями, в то время как информация о мультимедиа и элементы управления воспроизведением заполняются хостом на основе состояния MediaSession вашего приложения.

Музыкальный проигрыватель показывает композицию Sounds of Spring Саммер Филдинг с квадратным портретом женщины, играющей на гитаре.

Рисунок 1: MediaPlaybackTemplate с действием заголовка для открытия очереди вверху.

В этом примере кода показано, как создать пример шаблона воспроизведения, который задает действие заголовка, позволяющее пользователю перейти на экран с очередью песен.

val playbackTemplate = MediaPlaybackTemplate.Builder()
      .setHeader(
        Header.Builder()
          .setStartHeaderAction(Action.BACK)
          .addEndHeaderAction(
                Action.Builder()
                  .setTitle(model.context.getString(R.string.queue_button_title))
                  .setIcon(
                    CarIcon.Builder(
                        IconCompat.createWithResource(
                          model.context,
                          R.drawable.gs_queue_music_vd_theme_24,
                        ))
                      .build())
                  .setOnClickListener(showQueueScreen())
                  .build())
          .setTitle(model.context.getString(R.string.media_playback_view_title))
          .build())
      .build()

При использовании MediaPlaybackTemplate зарегистрируйте токен MediaSession с помощью MediaPlaybackManager в вашем CarAppService . Если этого не сделать, при отправке MediaPlaybackTemplate на хост будет отображена ошибка.

import androidx.car.app.media.MediaPlaybackManager


override fun onCreateSession(sessionInfo: SessionInfo): Session {
    return object : Session() {
        

        init {
          lifecycle.addObserver(
            LifecycleEventObserver { _, event ->
              if (event == ON_CREATE) {
                val token = ... // MediaSessionCompat.Token
                (carContext.getCarService(CarContext.MEDIA_PLAYBACK_SERVICE) as MediaPlaybackManager)
                  .registerMediaPlaybackToken(token)
              }
              ...
            }
          )
        }
    }
}

.registerMediaPlaybackToken необходим для предоставления информации о воспроизведении мультимедиа и элементов управления для Android Auto. Это также важно для хоста, чтобы создавать уведомления, специфичные для мультимедиа.

Организуйте медиа с помощью шаблонов

Чтобы организовать просмотр медиафайлов, таких как песни или альбомы, мы рекомендуем использовать SectionedItemTemplate , который позволяет использовать GridSection и RowSection вместе для создания макетов, которые сочетают списки изображений и текстовых элементов.

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

Рисунок 2: SectionedItemTemplate содержащий RowSection , за которым следует GridSection

Использование SectionedItemTemplate внутри TabTemplate

Одним из удобных способов категоризации медиафайлов в вашем приложении является использование SectionedItemTemplate внутри TabTemplate .

val template =
      SectionedItemTemplate.Builder()...build();
val tabTemplate = 
      TabTemplate.Builder(tabCallback)
          .setTabContents(TabContents.Builder(template).build)
          .setHeaderAction(Action.APP_ICON)
          
          .build();

Более подробную информацию о том, как разработать пользовательский интерфейс вашего медиа-приложения с использованием этих шаблонов, см. в разделе Медиа-приложения .

При просмотре медиа важно, чтобы пользователь мог быстро перейти к MediaPlaybackTemplate с минимальным отвлечением. Чтобы соответствовать требованиям качества MFT-1 , ваше приложение должно иметь возможность доступа к MediaPlaybackTemplate со всех экранов просмотра медиа.

Если вы используете SectionedItemTemplate , вы можете добиться этого, добавив плавающую кнопку действия, которая перенаправляет вас на экран воспроизведения мультимедиа. Для других шаблонов действие заголовка — это еще один способ добиться этого.