系統元件和使用者流程

下圖說明與媒體互動的元件:

系統元件

圖 1. 系統元件

下表說明此圖中的元素:

元件 說明
主畫面 代表車輛 UI 中其他顯示及控制目前播放的介面 媒體。在 Android 開放原始碼計畫中,這是系統啟動時顯示的主畫面。在這個畫面中 使用者可以查看正在播放的媒體項目詳細資料,並執行一組有限的標準作業 和自訂動作 (例如「播放」和「暫停」)。
系統 UI 提供包含全域 UI 導覽選項的功能,例如:前往 媒體:
Google 助理 Android 為各種語音助理應用程式提供用來與系統互動的機制。 這類應用程式可在背景與媒體來源互動 (例如, 語音指令產生的歌曲),或是在前景中前往媒體 (例如 系統指示語音助理應用程式顯示特定媒體來源的使用者介面時)。
應用程式啟動器 Android 應用程式會透過應用程式啟動器啟動,包括媒體來源。媒體可以 呈現自己的媒體來源選取器,搭配或取代應用程式啟動器 發展媒體的起點
Google Play 商店 使用 GAS 時,使用者可透過以下應用程式找出並安裝新的應用程式 Android 裝置。針對媒體,應用程式安裝完成後,系統會將使用者導向至媒體 完成登入程序或開始與應用程式互動。
媒體工作階段管理員 可追蹤及控管所有媒體來源的媒體工作階段的 Android 系統服務。這項服務 提供的機制可偵測媒體來源成為前景媒體的時機 來源。媒體以及所有其他顯示目前正在播放媒體來源的應用程式 ( 例如主畫面),請使用「媒體工作階段管理員」偵測這些事件並更新使用者介面 。媒體來源會與媒體工作階段管理員互動的方式 媒體業 工作階段 API
電台 能夠與無線電硬體互動的特殊應用程式。電台搜尋 快速選取最近識別的電台,並切換電台。 使用者可以切換使用 Radio 和 Media 的 UI 元件 這點十分重要
駕駛人分心引擎 一種 Android 系統服務,用來根據 。媒體來源登入和設定使用者體驗 (即直接操控螢幕) 媒體來源),則這項服務可確保車輛在發動時不會顯示不安全的內容 都必須先經過處理原始設備製造商 (OEM) 可以自訂這些狀態的定義,以及系統運作方式 回應這些狀況 (例如顯示封鎖畫面的疊加層)。

使用者流程

啟動媒體應用程式

啟動媒體的程序如下所示。

啟動媒體應用程式

圖 2. 啟動媒體應用程式

媒體必須透過以下的隱含方式啟動 CAR_INTENT_ACTION_MEDIA_TEMPLATE。 這項意圖可能會包含下列資訊做為「額外項目」

  • android.car.intent.extra.MEDIA_COMPONENT (選用)。額外字串 表示 MediaBrowserService敬上 顯示在要連結的媒體應用程式中如未提供,媒體螢幕 目前所選的媒體應用程式。這項意圖的範本如下: 進入點:

    • 系統 UI。用於返回媒體體驗或開始 初次使用 Chrome 時在此情況下,使用上述 Intent 時不會有任何 額外項目,以使 Media 顯示目前所選的媒體應用程式。

    • 主畫面、Google 助理和通知中心。,使用者可以 請前往「媒體」,即可顯示目前所選的媒體應用程式。無論在任何情況下 隱含意圖 (不含額外項目) 就會觸發

    • 應用程式啟動器。當使用者從 應用程式啟動器,上述意圖包含 CAR_EXTRA_MEDIA_COMPONENT敬上 額外項目,其中包含所選的媒體應用程式。媒體將此指定為 並與其連線詳情請參閱下一節:「應用程式」 媒體整合啟動器。

應用程式啟動器與媒體整合

媒體應用程式不得提供任何加上 android.intent.category.LAUNCHER類別。因此,應用程式啟動器 相同) 必須導入特殊邏輯,才能處理媒體來源整合問題:

  • 應用程式啟動器必須掃描系統,尋找要實作的套件 MediaBrowserService.SERVICE_INTERFACE。 針對這類套件,應用程式啟動器會擷取服務圖示 (與擷取其他套件內容所用的服務圖示類似) 活動。

  • 然後,應用程式啟動器會將這些套件與實作 android.intent.category.LAUNCHER 個活動。如果應用程式提供 MediaBrowserService 實作和啟動器活動時,服務會 優先順序。

    截至本文撰寫時間為止,沒有任何媒體來源應用程式可提供啟動器活動。

  • 您可以在 Android 開放原始碼計畫程式碼中找到這個邏輯的範例: AppLauncherUtils#getAllLauncherApps()

登入流程和設定選項

媒體應用程式可以提供車輛最佳化設定活動。這類活動可以是 用於實作未由 Android Media API 處理的使用者流程,例如:

  • 登入
  • 登出
  • 切換帳戶
  • 顯示使用者目前登入的位置 (如有)
  • 服務設定

登入流程

圖 3. 登入流程

這項設定活動是由媒體應用程式透過下列意圖篩選器宣告:

<activity android:name=".AppSettingsActivity"
          android:exported="true
          android:theme="@style/SettingsActivity"
           android:label="@string/app_settings_activity_title">
   <intent-filter>
       <action android:name="android.intent.action.APPLICATION_PREFERENCES"/>
   </intent-filter>
</activity>

媒體必須實作下列邏輯:

  • 檢查目前所選的媒體應用程式是否包含具有指定 意圖篩選器。

  • 如果是的話,請允許使用者前往活動。

  • 如果車輛使用者體驗限制生效 (例如車輛正在移動),這項預設服務應能滿足這項需求 「設定」活動並非驅動程式最佳化 UI,因此會停用。

處理錯誤和需要登入

媒體是透過 Android Media Session API 與媒體應用程式互動。隨心所欲 API,媒體收到 PlaybackState敬上 物件,用於通訊媒體應用程式的目前狀態。

當媒體應用程式變更時,系統就會啟動登入程序 PlaybackState敬上 到 STATE_ERROR、 包括特定的錯誤代碼 (詳情請見下方說明)。當此情況 發生時,媒體會顯示錯誤說明,以及前往登入活動的預設用途 是由媒體應用程式實作的

應用程式可以透過相同流程指出其他錯誤情況 (例如, 伺服器連線錯誤)。

處理錯誤

圖 4. 處理錯誤

進行一般 PlaybackState 錯誤處理時,媒體必須檢查下列輸入內容。

  • PlaybackState 錯誤代碼等於 PlaybackStateCompat#ERROR_CODE_AUTHENTICATION_EXPIRED。 這項信號 媒體應用程式需要登入才能繼續作業。其他錯誤代碼 ,這會指出其他類型的錯誤情況。

  • PlaybackState 則錯誤訊息 (由媒體應用程式使用 PlaybackStateCompat.Builder#setErrorMessage 方法) 包含 使用者可以理解的說明 (例如「您尚未登入。」)。這則訊息必須向 要讓使用者分心,必須加以最佳化 (DO)。

  • 或者,PlaybackState 可以包含下列額外項目 (由媒體設定) 具有PlaybackStateCompat.Builder#setExtras的應用程式 方法),

    • android.media.extras.ERROR_RESOLUTION_ACTION_LABEL。設定為 包含使用者可理解的訊息,會顯示在使用者輕觸並啟動 登入流程。

    • android.media.extras.ERROR_RESOLUTION_ACTION_INTENT。設定 PendingIntent 將於以下日期累計: 當使用者按下上述按鈕時觸發。這個 PendingIntent 指向由相同媒體應用程式實作的自訂登入活動。

  • PlaybackState 州等於 STATE_ERROR。 這表示您必須先登入,才能執行其他操作。