系統元件和使用者流程

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

系統組成

圖 1.系統組件

該圖中的元素在表中進行了描述:

成分描述
主螢幕表示汽車 UI 中顯示和控制目前播放媒體的其他表面。在 AOSP 中,這是系統啟動時顯示的主畫面。從此畫面上,使用者可以查看正在播放的媒體項目的詳細信息,並執行一組有限的標準和自訂操作(例如,播放和暫停)。
系統介面提供包含全域 UI 導覽選項的功能,例如導覽至媒體。
助理Android 為不同​​的語音助理應用程式提供了與系統互動的機制。這些應用程式可以在背景與媒體來源互動(例如,透過語音命令播放歌曲),或導航到前台的媒體(例如,當指示語音助理應用程式顯示某個應用程式的 UI 時)。特定媒體來源)。
應用程式啟動器所有 Android 應用程式都在應用程式啟動器中啟動,包括媒體來源。媒體可以呈現自己的媒體來源選擇器,補充或替換應用程式啟動器作為媒體的起始位置。
谷歌應用商店使用 GAS 時,用戶可以在 Android 裝置中尋找並安裝新應用程式。對於媒體,安裝應用程式後,用戶將被定向到媒體以完成登入程序或開始與應用程式互動。
媒體會議經理Android 系統服務,追蹤並控制來自所有媒體來源的媒體會話。它提供了偵測媒體來源何時成為前台媒體來源的機制。媒體以及顯示當前正在播放的媒體來源(例如主螢幕)的所有其他應用程序,使用媒體會話管理器來偵測這些事件並相應地更新 UI。媒體來源透過媒體會話API與媒體會話管理器互動。
收音機與無線電硬體互動的專用應用程式。無線電搜尋廣播電台,快速選擇最近識別的電台並在無線電頻段之間切換。廣播和媒體共享的 UI 元件使用戶能夠在兩種體驗之間切換。
駕駛分心引擎Android系統服務用於根據汽車的行駛狀態施加UX限制。對於媒體來源登入和設定UX(螢幕由媒體來源直接控制),此服務可確保汽車在行駛狀態下不會顯示不安全的內容。 OEM 可以自訂這些狀態的定義以及系統在這些情況下的反應方式(例如,透過顯示阻塞螢幕覆蓋)。

用戶流量

媒體應用程式啟動

啟動 Media 的過程如下所示。

媒體應用程式啟動

圖 2.媒體應用程式啟動

必須使用下列隱式CAR_INTENT_ACTION_MEDIA_TEMPLATE啟動媒體。此意圖可以包含以下資訊作為附加資訊:

  • android.car.intent.extra.MEDIA_COMPONENT可選)。用於表示媒體要連接的媒體應用程式中MediaBrowserService的扁平化元件名稱的字串。如果未提供,媒體將顯示目前選擇的媒體應用程式。從以下入口點使用此意圖:

    • 系統使用者介面。用於返回媒體體驗或首次開始使用它。在這種情況下,將使用上述 Intent,無需任何額外操作,以使 Media 顯示目前選擇的媒體應用程式。

    • 主螢幕、助手和通知中心。用戶可以導航到媒體以顯示目前選擇的媒體應用程式。在所有情況下,都會觸發沒有額外內容的隱式 Intent。

    • 應用程式啟動器。當使用者從應用程式啟動器中選擇媒體應用程式時,上述意圖包括CAR_EXTRA_MEDIA_COMPONENT額外內容,其中包含所選的媒體應用程式。媒體將其指定為新選擇的應用程式並連接到它。有關詳細信息,請參閱下面的“應用程式啟動器到媒體整合”部分。

應用程式啟動器到媒體集成

媒體應用程式不允許提供任何帶有android.intent.category.LAUNCHER類別註釋的活動。因此,應用程式啟動器(或其等效物)必須實現特殊邏輯來解決媒體來源整合問題:

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

  • 然後,應用程式啟動器將這些套件與實作android.intent.category.LAUNCHER活動的套件組合。如果應用程式提供MediaBrowserService實作和啟動器活動,則該服務優先。

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

  • 此邏輯的範例可以在AppLauncherUtils#getAllLauncherApps()的 AOSP 程式碼中找到。

登入流程和配置選項

媒體應用程式可以包含針對車輛最佳化的設定活動。此類活動可用於實作 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 的一部分,Media 接收一個PlaybackState對象,該對象傳達媒體應用程式的當前狀態。

當媒體應用程式將PlaybackState更改為STATE_ERROR時,登入程序開始,包括特定的錯誤代碼(請參閱下面的詳細資訊)。發生這種情況時,媒體會顯示錯誤描述以及導航到媒體應用程式實現的登入活動的功能。

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

錯誤處理

圖 4.錯誤處理

作為正常PlaybackState錯誤處理的一部分,Media 必須檢查以下輸入。

  • 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 。這表示在登入完成之前無法進行其他操作。