メディアアプリを自動車向け Android に拡張する

アプリが 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 を使用して、アプリをスマートフォンではなく自動車に直接インストールします。

サポートされているアプリのカテゴリ

メディアアプリを使用すると、ユーザーは音楽、ラジオ、オーディオブック、その他のオーディオ コンテンツを車内でブラウジングして再生できます。詳細については、自動車向けオーディオ再生アプリを作成するをご覧ください。自動車向けメディアアプリを作成するでも詳細情報をご確認いただけます。

メディアアプリは、MediaLibraryServiceMediaSession を使用して作成されます。Android Automotive OS では、ビューまたは Compose を使用して、ログイン画面と設定画面(駐車中に使用するもの)を作成することもできます。

動画アプリを使用すると、ユーザーは駐車中にストリーミング動画を視聴できます。アプリの主な目的は、ストリーミング動画を表示することです。これらのアプリは、View または Compose を使用して作成されます。詳細については、Android Automotive OS 用の動画再生アプリを作成するをご覧ください。詳しくは、Android Automotive OS 用の動画アプリを作成するをご覧ください。

自動車向けオーディオ再生アプリを作成する

このガイドでは、基本的なメディア再生アプリがすでに存在することを前提としています。まだ作成していない場合は、開始するために基本的なメディア プレーヤー アプリを作成するをご覧ください。

このガイドでは、具体的なガイダンスが記載されたその他のリソースへのリンクなど、必要な操作に関する情報を提供します。

再生コンポーネント

Media3 は、再生ユースケースのためのいくつかの主要コンポーネントを提供します。これらのコンポーネントを構成するクラスは、以前の Android メディア ライブラリを扱ったことがあれば、なじみがあります。

次の図は、一般的なアプリでこれらのコンポーネントがどのように連携するかを示しています。

Media3 を使用するメディアアプリの各コンポーネントは、インターフェースとクラスを共有することで、いくつかの簡単な方法で接続します。
図 1: メディアアプリ コンポーネント

詳しくは、再生コンポーネントをご覧ください。

MediaLibraryServiceMediaLibrarySession を実装する

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() コールバック メソッドがトリガーされます。ルートのメディア アイテムを簡単に返して、ライブラリへのアクセスを許可できます。onGetChildren() コールバック メソッドは、Android Auto または Android Automotive OS が、より深いレベルのコンテンツ ライブラリをブラウジングしようとしたときに呼び出されます。

これらのプラットフォームでは、コンテンツ ライブラリの構造に追加の制限が適用されます。コンテンツ ライブラリの表示方法をカスタマイズする方法について詳しくは、メディア ブラウザ サービスを作成するのガイドをご覧ください。

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 の一部のコンポーネントには、プラットフォーム固有の要件があります。これらのコンポーネントのコードを、プロジェクト内の他のコード(モバイルアプリに使用するコードなど)から分離できるモジュールを作成します。

プロジェクトに自動車モジュールを追加する手順は次のとおりです。

  1. Android Studio で、[File] > [New] > [New Module] をクリックします。
  2. [Automotive Module] を選択して、[Next] をクリックします。
  3. [Application/Library name] を入力します。これは、Android Automotive OS 上のアプリでユーザーが目にする名前です。
  4. [Module name] を入力します。
  5. アプリに合わせて [Package name] の名前を調整します。
  6. [Minimum SDK] で [API 28: Android 9.0 (Pie)] を選択して、[Next] をクリックします。

    Android Automotive OS をサポートする車は、すべて Android 9(API レベル 28)以降に対応しているため、上記の値を選択すると、互換性のあるすべての車がターゲットになります。

  7. [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 アプリのマニフェスト内で宣言するのは、このアクティビティのみです。

設定アクティビティやログイン アクティビティを追加したら、application 要素に android:appCategory="audio" 属性を設定し、次の 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_LAUNCHERACTION_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 用に駐車中用のアプリを作成するおよび Android Automotive OS 用の動画アプリを作成するで説明されているように、動画アプリの特定の要件に注意する必要があります。以下の手順を使用する必要があります。

アプリを動画アプリとしてマークする

アプリが動画に対応していることを示すには、automotive_app_desc.xml という名前の XML ファイルをプロジェクトの res/xml/ ディレクトリに追加します。このファイルに次の内容を含めます。

<automotiveApp>
    <uses name="video"/>
</automotiveApp>

次に、マニフェストの application 要素内に、XML ファイルを参照する次の meta-data 要素を追加します。

<meta-data android:name="com.android.automotive"
    android:resource="@xml/automotive_app_desc"/>