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