系統元件和使用者流程

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

元件 說明
主畫面 代表車輛 UI 中的其他介面,可顯示及控制目前播放的媒體。在 AOSP 中,這是系統啟動時顯示的主畫面。在這個畫面上,使用者可以查看播放中媒體項目的詳細資料,並執行一組有限的標準和自訂動作 (例如「播放」和「暫停」)。
系統 UI 提供全域 UI 導覽選項等功能,例如導覽至「媒體」。
助理 Android 提供機制,讓不同的語音助理應用程式與系統互動。 這些應用程式可以在背景與媒體來源互動 (例如播放語音指令結果中的歌曲),或在前景導覽至媒體 (例如指示語音助理應用程式顯示特定媒體來源的 UI)。
應用程式啟動器 所有 Android 應用程式都會在應用程式啟動器中啟動,包括媒體來源。媒體可以顯示自己的媒體來源選取器,做為媒體的起始位置,補充或取代應用程式啟動器。
Google Play 商店 使用 GAS 時,使用者可在此尋找並在 Android 裝置上安裝新應用程式。如果是媒體,使用者安裝應用程式後,系統會將他們導向媒體,完成登入程序或開始與應用程式互動。
媒體工作階段管理員 Android 系統服務,可追蹤及控管所有媒體來源的媒體工作階段。這項 API 提供偵測機制,可偵測媒體來源何時成為前景媒體來源。媒體和所有其他顯示目前播放媒體來源的應用程式 (例如主畫面),都會使用 Media Session Manager 偵測這些事件,並據此更新 UI。媒體來源會透過 Media Session API 與媒體工作階段管理工具互動。
電台 與無線電硬體互動的專用應用程式。搜尋電台、快速選取最近識別的電台,以及在無線電頻段之間切換。Radio 和 Media 共用的 UI 元件可讓使用者在這兩種體驗之間切換。
駕駛人分心程度引擎 Android 系統服務,用於根據車輛的行駛狀態強制執行使用者體驗限制。如果是媒體來源登入和設定 UX (畫面直接由媒體來源控制),這項服務可確保車輛處於行車狀態時,不會顯示不安全內容。原始設備製造商可以自訂這些狀態的定義,以及系統在這些情況下的反應 (例如顯示封鎖畫面疊加層)。

使用者流程

啟動媒體應用程式

媒體必須使用下列隱含 CAR_INTENT_ACTION_MEDIA_TEMPLATE 啟動。這項意圖可將下列資訊做為額外資訊:

  • android.car.intent.extra.MEDIA_COMPONENT (選用)。字串額外資訊,代表媒體應用程式中 MediaBrowserService 的扁平化元件名稱,媒體要連線至該應用程式。如未提供,Media 會顯示目前選取的媒體應用程式。這個意圖會從下列進入點使用:

    • 系統 UI。用於返回媒體體驗,或首次開始使用媒體體驗。在本例中,系統會使用上述 Intent,但不含任何額外資訊,因此「媒體」會顯示目前選取的媒體應用程式。

    • 主畫面、智慧助理和通知中心。使用者可以前往「媒體」,顯示目前選取的媒體應用程式。在所有情況下,系統都會觸發沒有額外內容的隱含意圖。

    • 應用程式啟動器。當使用者從應用程式啟動器選取媒體應用程式時,上述意圖會包含 CAR_EXTRA_MEDIA_COMPONENT 額外資訊,其中包含所選媒體應用程式。媒體會將此視為新選取的應用程式,並連線至該應用程式。詳情請參閱下方的「應用程式啟動器與媒體整合」一節。

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

媒體應用程式不得提供任何以 android.intent.category.LAUNCHER 類別註解的活動。因此,應用程式啟動器 (或同等項目) 必須實作特殊邏輯,才能處理媒體來源整合:

  • 應用程式啟動器必須掃描系統,找出實作 MediaBrowserService.SERVICE_INTERFACE 的套件。 對於這些套件,應用程式啟動器會擷取服務圖示,方式與擷取其他活動類似。

  • 應用程式啟動器接著會將這些套件與實作 android.intent.category.LAUNCHER 活動的套件合併。如果應用程式提供 MediaBrowserService 實作和啟動器活動,服務會優先執行。

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

  • 您可以在 AOSP 程式碼中找到這項邏輯的範例:AppLauncherUtils#getAllLauncherApps()

登入流程和設定選項

媒體應用程式可以加入專為車輛用途設計的設定活動。這類活動可用於實作 Android Media API 未處理的使用者流程,例如:

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

媒體應用程式會使用下列意圖篩選器宣告這項設定活動:

<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>

媒體必須實作下列邏輯:

  • 確認目前選取的媒體應用程式包含具有指定 Intent 篩選器的活動。

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

  • 如果車輛使用者體驗限制處於有效狀態 (例如車輛正在行駛),則應停用這項功能,因為「設定」活動並非專為駕駛人設計的使用者介面。

錯誤處理和登入規定

Android Media Session API 可讓媒體與媒體應用程式互動。透過這項 API,媒體會收到 PlaybackState 物件,其中包含媒體應用程式的目前狀態。

媒體應用程式將 PlaybackState 變更為 STATE_ERROR 時,登入程序就會啟動,包括特定錯誤代碼 (詳情請見下文)。發生這種情況時,媒體會顯示錯誤說明,以及導覽至媒體應用程式實作的登入活動的介面。

應用程式可以使用相同流程,發出其他錯誤狀況的信號 (例如伺服器連線錯誤)。

在正常的 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。 這表示必須先完成登入,才能執行其他作業。