アプリが Android Auto や Android Automotive OS を搭載している自動車で機能するようにしましょう。 どちらの場合でも機能する単一のアプリ アーキテクチャを採用することで、すべてのユーザーにアプリを楽しんでもらうことができます。
自動車向け Android とは
自動車向けメディアアプリを使用すると、ユーザーはデジタルライフを自動車とシームレスに接続できます。スマートフォン向けアプリを自動車でも利用できるようにすることで、ユーザー エクスペリエンスを向上させることができます。これは、Android Auto または Android Automotive OS と統合することで実現できます。
自動車向け Android アプリでは、ドライバーの注意散漫を防ぐことが何より大切です。音声コマンドや非常に実用的なビジュアル デザインを使用するなど、ベスト プラクティスに準拠することで、注意散漫を最小限に抑えることができます。このようにして、メディアアプリは、関連性がある場合にのみタイムリーな情報を運転者に表示し、一般的なタスクには予測可能なパターンを使用できます。
Android Auto
Android Auto は Android スマートフォンで Android Auto アプリを使用しており、互換性のある車またはアフターマーケット ステレオ システムを持っているユーザーに対して、ドライバー向けに最適化されたアプリ エクスペリエンスを提供します。車載ディスプレイにスマートフォンを接続して、直接アプリを使用できます。ドライバー向けに最適化されたインターフェースを表示するための Android Auto 用サービスを作成することで、Android Auto とスマートフォン アプリを接続できるようになります。
Android Automotive OS
Android Automotive OS は、自動車に組み込まれた Android ベースのインフォテインメント システムです。この車載システムは、ドライバー向けに最適化されたスタンドアロンの Android 搭載デバイスです。ユーザーは Android Automotive OS を使用して、アプリをスマートフォンではなく自動車に直接インストールします。
サポートされているアプリのカテゴリ
メディアアプリを使用すると、ユーザーは音楽やラジオ、オーディオブック、その他各種のオーディオ コンテンツを検索し、再生することができます。詳しくは、 自動車向けオーディオ再生アプリを作成するおよび 自動車向けメディアアプリを作成するをご覧ください。
メディアアプリは MediaLibraryService
と MediaSession を使用して作成されます。
Android Automotive OS では、ビューまたは Compose を使用して、ログイン画面と設定画面(駐車中に使用するもの)を作成することもできます。
動画アプリを使用すると、ユーザーは駐車中にストリーミング動画を視聴できます。アプリの主な目的は、ストリーミング動画を表示することです。これらのアプリは、ビューまたは Compose を使用して作成されます。詳しくは、 Android Automotive OS 向け動画再生アプリを作成するおよび Android Automotive OS 向け動画アプリを作成するをご覧ください。
自動車向けオーディオ再生アプリを作成する
このガイドは、基本的なメディア再生アプリがすでにあることを前提としています。ない場合は、 基本的なメディア プレーヤー アプリを作成する をご覧ください。
このガイドでは、必要な作業について説明します。具体的なガイダンスが記載されているその他のリソースへのリンクも掲載しています。
再生コンポーネント
Media3 には、再生ユースケース向けの主要なコンポーネントがいくつか用意されています。以前の Android メディア ライブラリを使用したことがある場合は、これらのコンポーネントを構成するクラスに慣れているでしょう。
次の図は、これらのコンポーネントが一般的なアプリでどのように連携しているかを示しています。
詳しくは、再生コンポーネントをご覧ください。
MediaLibraryService と MediaLibrarySession を実装する
A MediaLibraryService
は、メディア ライブラリを提供してアクセスを許可するための標準化された API を提供します。
メディアアプリに Android Auto または Android Automotive OS のサポートを追加する場合は、これらのプラットフォームがメディア ライブラリ用のドライバー セーフな独自の UI を提供するため、これが必要です。
MediaLibraryService の実装と使用について詳しくは、
MediaLibraryService でコンテンツを提供するをご覧ください。
再生コントロールには、メディア セッションを使用します。MediaSession API は、音声や動画のプレーヤーを操作するための汎用的な手段を提供します。Jetpack Media3 ライブラリには、MediaSession を拡張してコンテンツ ブラウジング API を追加する MediaLibrarySession が含まれています。
メディア セッションをプレーヤーに接続すると、アプリはメディア再生を外部にアドバタイズし、Android Auto、Android Automotive OS、Google アシスタントなどの外部ソースから再生コマンドを受信できます。詳しくは、 MediaSession を使用して再生を制御およびアドバタイズする および MediaLibrarySession を使用するをご覧ください。
メディア セッションでは、少なくとも次のプレーヤー コマンドのサポートを宣言する必要があります。
再生コントロールを有効にするガイド では、自動車の再生コントロールをカスタマイズする方法について説明します。
Android Auto または Android Automotive OS がアプリに接続すると、表示するコンテンツ ライブラリがリクエストされ、onGetLibraryRoot() コールバック メソッドがトリガーされます。ルートのメディア アイテムをすばやく返して、ライブラリへのアクセスを許可できます。Android Auto または Android Automotive OS がコンテンツ ライブラリのより深いレベルをブラウジングしようとすると、onGetChildren() コールバック メソッドが呼び出されます。
これらのプラットフォームでは、コンテンツ ライブラリの構造にさらに 制限が適用されます。コンテンツ ライブラリの表示方法のカスタマイズについて詳しくは、 次の メディア ブラウザ サービスを作成する ガイドをご覧ください。
Android Auto のサポートを宣言する
次のマニフェスト エントリを使用して、スマートフォン アプリが 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 という名前の XML ファイルをプロジェクトの res/xml/ ディレクトリに追加します。このファイルには次の内容が含まれている必要があります。
<automotiveApp>
<uses name="media"/>
</automotiveApp>
Android Automotive OS のサポートを宣言する
アプリのロジックをすべて自動車向けアプリと共有できるわけではないため、自動車モジュールを作成する必要があります。Android Automotive OS の一部のコンポーネント(マニフェストなど)では、プラットフォーム固有の要件が適用されます。そのようなコンポーネント用のコードを、プロジェクト内の他のコード(モバイルアプリに使用するコードなど)から分離できるように、モジュールを作成します。
プロジェクトに自動車モジュールを追加する手順は次のとおりです。
- Android Studio で、[File] > [New] > [New Module] をクリックします。
- [Automotive Module] を選択して、[Next] をクリックします。
- [Application/Library name] を入力します。これは、Android Automotive OS 上のアプリでユーザーが目にする名前です。
- [Module name] を入力します。
- アプリに合わせて [Package name] の名前を調整します。
[Minimum SDK] で [API 28: Android 9.0 (Pie)] を選択して、[Next] をクリックします。
Android Automotive OS をサポートする車は、すべて Android 9(API レベル 28)以降に対応しているため、上記の値を選択すると、互換性のあるすべての車がターゲットになります。
[No Activity] を選択し、[Finish] をクリックします。
Android Studio 内でモジュールを作成したら、新しい自動車モジュール内で AndroidManifest.xml を開きます。
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.media">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme" />
<uses-feature
android:name="android.hardware.type.automotive"
android:required="true" />
</manifest>
application 要素は標準的なアプリ情報を格納し、
uses-feature 要素は Android Automotive OS のサポートを宣言しています。
この段階では、マニフェスト内で宣言されているアクティビティはありません。
設定アクティビティやログイン アクティビティを実装する場合は、 ここで追加します。このようなアクティビティは、明示的インテントを使用して、システムによってトリガーされます。Android Automotive OS アプリ用のマニフェスト内で宣言するアクティビティは、ここで追加するものだけです。
設定アクティビティやログイン アクティビティを追加したら、
android:appCategory="audio" 属性を application 要素に設定し、
次の uses-feature 要素を追加して、マニフェスト ファイルを完成させます。
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.media">
<application
android:allowBackup="true"
android:appCategory="audio"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme" />
<uses-feature
android:name="android.hardware.type.automotive"
android:required="true" />
<uses-feature
android:name="android.hardware.wifi"
android:required="false" />
<uses-feature
android:name="android.hardware.screen.portrait"
android:required="false" />
<uses-feature
android:name="android.hardware.screen.landscape"
android:required="false" />
</manifest>
これらの機能を明示的に required="false" に設定することで、
Automotive OS
デバイスで利用できるハードウェア機能とアプリが競合しないようにします。
次のマニフェスト エントリを使用して、アプリが Android Automotive OS をサポートすることを宣言します。
<application>
...
<meta-data android:name="com.android.automotive"
android:resource="@xml/automotive_app_desc"/>
...
</application>
このマニフェスト エントリは、アプリがサポートする自動車機能を宣言している XML ファイルを参照します。
メディアアプリがあることを示すには、automotive_app_desc.xml という名前の XML ファイルをプロジェクトの res/xml/ ディレクトリに追加します。このファイルに次の内容を含めます。
<automotiveApp>
<uses name="media"/>
</automotiveApp>
インテント フィルタ
Android Automotive OS は、明示的インテントを使用して、メディアアプリ内のアクティビティをトリガーします。CATEGORY_LAUNCHER や ACTION_MAIN インテント フィルタを持つアクティビティは、マニフェスト ファイルに組み込まないでください。
下記の例のようなアクティビティは通常、スマートフォンや各種モバイル デバイスをターゲットとしています。このようなアクティビティは、Android Automotive OS アプリをビルドするモジュールではなく、スマートフォン アプリをビルドするモジュール内で宣言します。
<activity android:name=".MyActivity">
<intent-filter>
<!-- You can't use either of these intents for Android Automotive OS -->
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<!--
In their place, you can include other intent filters for any activities
that your app needs for Android Automotive OS, such as settings or
sign-in activities.
-->
</intent-filter>
</activity>
次のステップ
Android Auto と Android Automotive OS 用のアプリが完成したので、運転中に安全に使用できるようにアプリを最適化する手順を追加することをおすすめします。安全で便利なユーザー エクスペリエンスを確保するためのその他の推奨事項については、 音声アクション、 注意散漫を防ぐための対策、 および エラー処理の技術ガイドをご覧ください。
Android Automotive OS 向け動画再生アプリを作成する
自動車向け動画アプリは自動車向けメディアアプリとは別に分類されるため、動画アプリには固有の要件があります。これについては、自動車向け駐車時向けアプリを作成するおよびAndroid Automotive OS 向け動画アプリを作成するで説明されています。そのための手順は次のとおりです。
アプリを動画アプリとしてマークする
アプリが動画に対応していることを示すには、マニフェストの <application>
要素に
android:appCategory="video" 属性を追加します。
<manifest ...>
...
<application
...
android:appCategory="video">
...
</application>
</manifest>
Android Automotive OS ハードウェア機能を宣言する
アプリが Android Automotive OS デバイスに対応していることを宣言するには、マニフェストに
android.hardware.type.automotive <uses-feature> 要素を追加します。
AAOS ハードウェア機能を宣言する
をご覧ください。android:required 属性を "false" または
"true" に設定するかどうかについては、
<manifest ...>
...
<uses-feature android:name="android.hardware.type.automotive" ...>
...
</manifest>