將媒體應用程式擴充至車輛專用 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 上,您也可以使用 View 或 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 程式庫包含 MediaLibrarySession,可擴充 MediaSession 以新增內容瀏覽 API。

將媒體工作階段連結至播放器後,應用程式便可在外部管道播放媒體,並接收外部來源 (例如 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 檔案會宣告應用程式支援的汽車功能。如要表示您有提供媒體應用程式,請在專案的 res/xml/ 目錄中新增名為 automotive_app_desc.xml 的 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 元素提供一些標準應用程式資訊,以及宣告支援 Android Automotive OS 的 uses-feature 元素。請注意,資訊清單中未宣告任何活動。

如果您要實作設定或登入活動,請在此新增這些項目。這些活動是由系統使用明確意圖觸發,而且只有您在 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 檔案會宣告應用程式支援的汽車功能。

如要表示您有提供媒體應用程式,請在專案的 res/xml/ 目錄中新增名為 automotive_app_desc.xml 的 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 的應用程式,您可能會想採取額外步驟,讓應用程式在行車期間更安全。如需其他建議,協助確保安全便利的使用者體驗,請參閱 Voice 操作不同的保護措施錯誤處理技術指南。

建構適用於 Android Automotive OS 的影片播放應用程式

由於影片應用程式與車輛中的媒體應用程式是分開的,因此您需要瞭解影片應用程式的一些特定規定,詳情請參閱「建構可在車輛停妥時使用的 Android Automotive OS 應用程式」和「建構適用於 Android Automotive OS 的影片應用程式」。請按照下列說明操作。

將應用程式標示為影片應用程式

如要指出您的應用程式支援影片功能,請在專案的 res/xml/ 目錄中加入名為 automotive_app_desc.xml 的 XML 檔案。此檔案應包含下列內容:

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

接著,請在資訊清單的 application 元素中加入下列 meta-data 元素,參照這個 XML 檔案:

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