Car App Library テンプレートを使用するメディアアプリでは、メディアのブラウジングと再生をカスタマイズしながら、車の画面用に最適化し、運転中の気を散らす要素を最小限に抑えることができます。
このガイドは、音声を再生するメディアアプリがスマートフォンにすでにインストールされており、そのメディアアプリが Android メディアアプリ アーキテクチャに準拠していることを前提としています。Car App Library を使用すると、自動車向けメディアアプリを作成する
MediaBrowser
データ構造を使用してビルドされたアプリ内エクスペリエンスの代わりに、テンプレートで置き換えることができます。再生コントロール用の MediaSession
と、おすすめやその他のスマート エクスペリエンスに使用される MediaBrowserService
は引き続き提供する必要があります。
アプリのマニフェストを構成する
自動車向け Android アプリ ライブラリを使用するに記載されている手順に加えて、テンプレート化されたメディアアプリには次の要件があります。
マニフェストでカテゴリのサポートを宣言する
アプリでは、CarAppService
のインテント フィルタで、自動車アプリのカテゴリとして androidx.car.app.category.MEDIA
を宣言する必要があります。
<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>
次に、xml リソースの automotive_app_desc.xml
にテンプレート宣言を追加します。次のように表示されます。
<automotiveApp xmlns:android="http://schemas.android.com/apk/res/android">
<uses name="media"/>
<uses name="template"/>
</automotiveApp>
アトリビューション アイコンを提供する
自動車向けアプリ ライブラリを使用してビルドされたメディアアプリには、必ずアトリビューション アイコンを追加してください。
音声操作をサポートする
アプリを音声対応にして、ユーザーが一般的な操作をハンズフリーで完了できるようにします。実装手順について詳しくは、メディアの音声操作をサポートするをご覧ください。テンプレート化されたメディアアプリで音声コマンドを受け取った場合、検索結果で MediaBrowserService
を更新する必要はありません。代わりに、メディア再生テンプレートにアクションを追加して、その再生または検索クエリに基づいてユーザーがさらにコンテンツを見つけられるようにすることを検討してください。VC-1
品質ガイドラインを満たすには、音声コマンドをサポートする必要があります。
再生テンプレートを作成する
MediaPlaybackTemplate
は、自動車向けアプリ ライブラリのメディアアプリにメディアの再生情報を表示します。このテンプレートでは、タイトルとカスタマイズ可能なアクションを含むヘッダーを設定できます。メディア情報と再生コントロールは、アプリの 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
を使用する場合は、CarAppService
で MediaPlaybackManager
を使用して MediaSession
トークンを登録します。そうしないと、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: RowSection
の後に GridSection
が続く SectionedItemTemplate
TabTemplate 内で SectionedItemTemplate を使用する
アプリ内でメディアを分類する便利な方法の 1 つは、TabTemplate
内で SectionedItemTemplate
を使用することです。
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
を使用している場合は、メディア再生画面に移動するフローティング操作ボタンを追加することで、この操作を実現できます。他のテンプレートでは、ヘッダー アクションを使用してこの操作を行うこともできます。