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

Шаблонные медиа-приложения находятся в стадии бета-тестирования
В настоящее время любой желающий может публиковать шаблонные медиа-приложения для внутреннего тестирования и закрытого тестирования в 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 , вы можете добиться этого, добавив плавающую кнопку действия, которая перенаправляет вас на экран воспроизведения мультимедиа. Для других шаблонов действие заголовка — это еще один способ добиться этого.