無線電控制實作

電台控制功能的實作方式是根據 MediaSession 和 MediaBrowse 實作,讓媒體和語音助理應用程式可控制電台。詳情請參閱 developer.android.com 上的「打造車用媒體應用程式」一文。

packages/apps/Car/libs 中的 car-broadcastradio-support 程式庫提供媒體瀏覽樹狀結構實作項目。這個程式庫也包含 ProgramSelector 的擴充功能,可用於將 URI 轉換為其他格式,或將其他格式轉換為 URI。建議無線電實作項目使用這個程式庫建構相關的瀏覽樹狀結構。

媒體來源切換器

為了在媒體中顯示的電台和其他應用程式之間提供無縫轉換,car-media-common 程式庫包含應整合至電台應用程式的類別。MediaAppSelectorWidget 可納入電台應用程式的 XML (在參考媒體和電台應用程式中使用的圖示和下拉式選單):

<com.android.car.media.common.MediaAppSelectorWidget
    android:id="@+id/app_switch_container"
    android:layout_width="@dimen/app_switch_widget_width"
    android:layout_height="wrap_content"
    android:background="@drawable/app_item_background"
    android:gravity="center" />

這項小工具會啟動 AppSelectionFragment,顯示可切換的媒體來源清單。如果您想要使用提供的 UI 以外的介面,可以在應顯示切換器時啟動 AppSelectionFragment,建立自訂小工具。

AppSelectionFragment newFragment = AppSelectionFragment.create(widget,
            packageName, fullScreen);
    newFragment.show(mActivity.getSupportFragmentManager(), null);

在 packages/apps/Car/Radio 中,參考電台應用程式實作項目提供實作範例。

詳細控制項規格

MediaSession (透過 MediaSession.Callback) 介面為目前播放的廣播節目提供控制機制:

  • onPlay,onStop。開啟或關閉電台播放的靜音功能。
  • onPause. 時間延遲暫停 (如有支援)。
  • onPlayFromMediaId:播放頂層資料夾中的任何內容。例如「播放 FM 電台」或「播放電台」。
  • onPlayFromUri:播放特定頻率。例如「播放 88.5 FM」。
  • onSkipToNext,onSkipToPrevious。切換至下一個或上一個電台。
  • onSetRating:新增或移除「我的收藏」中的項目。

MediaBrowser 會透過三種頂層目錄公開可調整的 MediaItem:

  • (選填) 節目 (電台)。雙調諧器收音機通常會使用這個模式,指出使用者所在位置的所有可調諧電台。
  • 收藏的內容。已新增至「我的最愛」清單的電台節目,其中部分節目可能無法收聽 (不在收訊範圍內)。
  • 頻道頻帶:目前區域中所有可能的管道 (87.9、88.1、88.3、88.5、88.7、88.9、89.1 等)。每個頻帶都有一個獨立的頂層目錄。
MediaBrowserService 樹狀結構
圖 2. MediaBrowserService 樹狀結構

每個資料夾 (AM/FM/節目) 中的每個元素都是 MediaItem,其中包含可與 MediaSession 搭配使用的 URI,用於調整頻道。每個頂層資料夾 (AM/FM/Programs) 都是 MediaItem,其中的 mediaId 可與 MediaSession 搭配使用,用於觸發播放作業,這取決於原始設備製造商 (OEM) 的判斷。舉例來說,「播放 FM」、「播放 AM」和「播放電台」都是非特定電台查詢,會使用 mediaId 傳送至 OEM 電台應用程式。電台應用程式會根據一般要求和 mediaId 決定要播放哪些內容。

MediaSession

由於廣播串流沒有暫停的概念,因此播放、暫停和停止動作不一定適用於廣播。在廣播電台中,Stop 動作會將串流設為靜音,而 Play 會將靜音設為關閉。

部分收音機 (或應用程式) 可透過快取內容,然後稍後播放,模擬廣播串流暫停的情況。在這種情況下,請使用 onPause。

透過 mediaId 和 URI 動作播放,目的是將電台調諧至從 MediaBrowser 介面擷取的電台。mediaId 是隨意字串,由收音機應用程式提供,用於強制設立用來識別特定電台的值,該值必須是獨特的 (也就是說,特定 ID 只會指向一個項目) 且穩定的 (也就是說,特定項目在整個工作階段中都會使用相同的 ID)。URI 會是明確定義的結構定義。簡而言之,這是 ProgramSelector 的 URI 格式。雖然這可保留唯一性屬性,但不一定會保持穩定,因為當電台轉移至其他頻率時,這項屬性可能會變更。

onPlayFromSearch 是設計用途,由用戶端 (隨附應用程式) 負責從 MediaBrowser 樹狀結構中選取搜尋結果。將這項責任轉移至無線電應用程式會增加複雜度,需要針對字串查詢的顯示方式簽訂正式合約,並導致不同硬體平台的使用者體驗不一致。

注意:收音機應用程式不包含其他資訊,因此無法透過 MediaBrowser 介面搜尋未向用戶端公開的電台名稱。

跳到下一個或上一個車站取決於目前的情況:

  • 當應用程式從「我的最愛」清單調到某個電台時,應用程式可以從「我的最愛」清單移動到下一個電台。
  • 從「節目」清單中收聽電台時,系統可能會依頻道號碼排序,切換至下一個可用的電台。
  • 聆聽任意頻道可能會導致系統切換至下一個實體頻道,即使沒有廣播訊號也一樣。

廣播應用程式會處理這些動作。

處理錯誤

TransportControls 動作 (播放、停止和下一首) 不會提供動作是否成功的回饋。如要指出錯誤,唯一的方法是將 MediaSession 狀態設為 STATE_ERROR,並附上錯誤訊息。

收音機應用程式必須處理這些動作,並執行或設定錯誤狀態。如果執行 Play 指令不是立即執行,播放狀態應變更為 STATE_CONNECTING (在直接調音的情況下),或是在執行指令時變更為 STATE_SKIPPING_TO_PREVIOUS 或 NEXT。

用戶端應監控 PlaybackState,並驗證工作階段是否將目前的程式變更為要求的內容,或進入錯誤狀態。STATE_CONNECTING 不得超過 30 秒。不過,直接調到特定的調頻/調幅頻率應該會更快。

新增及移除收藏項目

MediaSession 支援分級功能,可用於控制「我的最愛」。onSetRating 以 RATING_HEART 類型的評分呼叫,可將目前收聽的電台新增或移除至收藏清單。

與舊版預設值相反,這個模型假設未排序且無邊界的精選清單,每個已儲存的精選項目都會分配至數字插槽 (通常為 1 到 6)。因此,以預設值為基礎的系統將無法與 onSetRating 作業相容。

MediaSession API 的限制是,只能新增或移除目前已調諧的電台。舉例來說,您必須先選取項目,才能移除該項目。這只是 MediaBrowser 用戶端 (例如隨附應用程式) 的限制。收音機應用程式並未受到類似限制。如果應用程式不支援「我的最愛」,則這個部分為選用項目。

MediaBrowser

為了表示哪些頻率或實際頻道名稱 (當調整為任意頻道時,是否適合特定無線電技術) 適用於特定區域,每個頻帶都會列出所有有效頻道 (頻率)。在美國地區,這相當於 87.8 到 108.0 MHz 範圍內的 101 個 FM 頻道 (使用 0.2 MHz 間距),以及 530 到 1700 kHz 範圍內的 117 個 AM 頻道 (使用 10 kHz 間距)。由於 HD 調頻使用相同的頻道空間,因此不會個別顯示。

目前可用的電台節目清單是平面式,因此不允許顯示分組方式,例如依據直接音訊廣播 (DAB) 集合分組。

常用清單中的項目可能無法調整。舉例來說,如果某個指定的節目超出範圍,收音機應用程式可能會或可能不會偵測到是否可以事先調到該項目。否則,系統可能不會將該項目標示為可播放。

為了識別頂層資料夾,系統會採用與藍牙相同的機制。也就是說, MediaDescription 物件的 Extras 組合包含了與調諧器相關的欄位,就像藍牙與 EXTRA_BT_FOLDER_TYPE 一樣。在廣播電台的情況下,這會導致在公開 API 中定義下列新欄位:

  • EXTRA_BCRADIO_FOLDER_TYPE = "android.media.extra.EXTRA_BCRADIO_FOLDER_TYPE"。下列任一值:
    • BCRADIO_FOLDER_TYPE_PROGRAMS = 1。目前可用的方案。
    • BCRADIO_FOLDER_TYPE_FAVORITES = 2. 我的最愛。
    • BCRADIO_FOLDER_TYPE_BAND = 3:指定頻帶的所有實體頻道。

    由於所有相關資料都符合現有的 MediaBrowser.MediaItem 配置,因此您不需要定義任何特定電台的自訂中繼資料欄位:

    • 節目名稱 (RDS PS、DAB 服務名稱)。 MediaDescription.getTitle。
    • FM 頻率。 URI (請參閱 ProgramSelector) 或 MediaDescription.getTitle (如果項目位於 BROADCASTRADIO_FOLDER_TYPE_BAND 資料夾中)。
    • 無線電專屬 ID (RDS PI、DAB SId)。 MediaDescription.getMediaUri 已剖析為 ProgramSelector。

    一般來說,您不需要為目前節目或「我的最愛」清單中的項目擷取 FM 頻率 (因為用戶端應以媒體 ID 運作)。不過,如果需要這類資訊 (例如為了顯示目的),則會出現在 URI 中,並可剖析為 ProgramSelector。不過,我們不建議使用 URI 選取目前工作階段中的項目。詳情請參閱 ProgramSelector。

    為避免效能或 Binder 相關問題,MediaBrowser 服務必須支援分頁:

    注意:根據預設,系統會在 onLoadChildren() 變化版本中實作分頁功能,但不會處理選項。

    所有類型清單 (原始頻道、已找到的節目和收藏內容) 中的相關項目可能會有不同的 mediaId (這取決於電台應用程式;支援程式庫會提供不同的 mediaId)。在大多數情況下,原始頻道和節目的 URI (以 ProgramSelector 表單表示) 不同 (沒有 RDS 的 FM 除外),但在節目和收藏內容之間的 URI 通常相同 (例如 AF 更新時除外)。

    針對不同類型的清單項目使用不同的 mediaId,可讓您針對這些項目採取不同的動作。您可以依據最近選取的 MediaItem 資料夾,在 onSkipToNext 上遍歷「收藏」清單或「所有節目」清單 (請參閱 MediaSession)。

    特殊音調操作

    使用者可透過節目清單收聽特定電台,但無法提出「收聽 FM 電台」等一般要求,因為這可能會導致系統收聽 FM 頻帶上最近收聽過的電台。

    為支援這類動作,部分頂層目錄會設定 FLAG_PLAYABLE 標記 (以及資料夾的 FLAG_BROWSABLE)。

    動作 轉到 發布方式
    播放電台 任何電台頻道 startService(ACTION_PLAY_BROADCASTRADIO)

    或

    playFromMediaId(MediaBrowser.getRoot())
    播放 FM 廣播 任何 FM 頻道 播放 FM 頻帶的 mediaId。

    應用程式會決定要收看哪個節目,通常是從指定清單中最近收看的頻道。如要進一步瞭解 ACTION_PLAY_BROADCASTRADIO,請參閱「一般播放意圖」。

    探索和服務連線

    PackageManager 可以直接找到提供廣播電台樹狀結構的 MediaBrowserService。如要這麼做,請使用 ACTION_PLAY_BROADCASTRADIO 意圖 (請參閱「一般播放意圖」) 和 MATCH_SYSTEM_ONLY 標記呼叫 resolveService。如要找出所有提供廣播電台服務的服務 (可能不只一個,例如 AM/FM 和衛星廣播電台),請使用 queryIntentServices。

    已解析的服務也會處理 android.media.browse.MediaBrowserService 繫結意圖。這項資訊已透過 GTS 驗證。

    如要連線至所選的 MediaBrowserService,請為特定服務元件和 connect建立 MediaBrowser 例項。建立連線後,您可以透過 getSessionToken 取得 MediaSession 的句柄。

    Radio 應用程式可限制在 onGetRoot 服務實作中允許連線的用戶端套件。應用程式應允許系統應用程式連線,而無須加入許可清單。如要進一步瞭解許可清單,請參閱「接受 Google 助理應用程式套件和簽章」。

    如果在沒有支援此來源的裝置上安裝來源專屬應用程式 (例如廣播應用程式),該應用程式仍會宣稱自己處理 ACTION_PLAY_BROADCASTRADIO 意圖,但其 MediaBrowser 樹狀結構不會包含廣播專屬標記。因此,如果客戶端想要檢查裝置上是否有特定來源,則必須:

    1. 探索電台服務 (呼叫 resolveService 即可取得 ACTION_PLAY_BROADCASTRADIO)。
    2. 建立 MediaBrowser,然後連線至該項目。
    3. 使用 EXTRA_BCRADIO_FOLDER_TYPE extra 判斷是否存在 MediaItem。

    注意: 在多數情況下,用戶端必須掃描所有可用的 MediaBrowser 樹狀結構,才能偵測特定裝置的所有可用來源。

    頻帶名稱

    樂團清單由一組頂層目錄代表,其中資料夾類型標記設為 BCRADIO_FOLDER_TYPE_BAND。其 MediaItem 的標題是代表樂團名稱的本地化字串。在多數情況下,這會與英文翻譯相同,但用戶端無法依據這項假設。

    為提供穩定的機制來查詢特定頻帶,我們為頻帶資料夾新增了額外標記 EXTRA_BCRADIO_BAND_NAME_EN。這是頻帶的非本地化名稱,只能使用下列預先定義值之一:

    • AM
    • FM
    • DAB

    如果樂團不在這個清單中,就不要設定樂團名稱標記。不過,如果頻道在清單中,則必須設定標記。高解析度調幅廣播不會列舉個別頻帶,因為它使用與調幅/調頻廣播相同的基礎媒體。

    一般播放意圖

    每個專門播放特定來源 (例如廣播電台或 CD) 的應用程式,都必須處理一般 play 意圖,才能從非活動狀態 (例如開機後) 開始播放某些內容。應用程式會自行決定如何選取要播放的內容,但通常會播放最近播放的廣播電台節目或 CD 音軌。每個音訊來源都有個別的意圖定義:

    • android.car.intent.action.PLAY_BROADCASTRADIO
    • android.car.intent.action.PLAY_AUDIOCD:CD-DA 或 CD-Text
    • android.car.intent.action.PLAY_DATADISC:光學資料光碟,例如 CD/DVD,但不是 CD-DA (可能是混合模式 CD)
    • android.car.intent.action.PLAY_AUX:未指定 AUX 通訊埠
    • android.car.intent.action.PLAY_BLUETOOTH
    • android.car.intent.action.PLAY_USB:未指定 USB 裝置
    • android.car.intent.action.PLAY_LOCAL:本機媒體儲存空間 (內建快閃記憶體)

    我們選擇使用意圖來執行一般播放指令,因為意圖可以同時解決兩個問題:一般播放指令本身和服務探索。有了這類意圖,您就能在不開啟 MediaBrowser 工作階段的情況下,執行這類簡單動作。

    服務探索其實是這些意圖解決的更重要問題。這樣一來,服務探索程序就會變得簡單明確 (請參閱「探索和服務連線」)。

    為了讓部分用戶端的實作更容易,我們提供了另一種方式來發出這類播放指令 (也必須由無線電應用程式實作):使用根節點的 rootId 發出 playFromMediaId (用作 mediaId)。雖然根節點無法播放,但其 rootId 是任意字串,可做為 mediaId 使用。不過,用戶端不必瞭解這項細微差異。

    ProgramSelector

    雖然 mediaId 足以從 MediaBrowserService 中選取管道,但會與工作階段繫結,且不同提供者之間的一致性不一致。在某些情況下,用戶端可能需要絕對指標 (例如絕對頻率),才能在工作階段和裝置之間維持連線。

    在數位廣播電台時代,單憑頻率無法收聽特定電台。因此,請使用 ProgramSelector 將頻道調諧至類比或數位頻道。ProgramSelector 由兩個部分組成:

    • 主要 ID。特定電台的專屬 ID,不會變更,但可能無法調到該電台。例如 RDS PI 代碼,可翻譯為美國的呼號。
    • 次要 ID:其他可用於調諧至該電台的 ID (例如頻率),可能包括其他無線電技術的 ID。舉例來說,DAB 電台可能會備有類比廣播。

    如要讓 ProgramSelector 符合 MediaBrowser 或 MediaSession 為基礎的解決方案,請定義 URI 結構定義來序列化。結構定義如下:

    broadcastradio://program/<primary ID type>/<primary ID>?
    <secondary ID type>=<secondary ID>&<secondary ID type>=<secondary ID>

    在這個範例中,次要 ID 部分 (問號 (?) 後方) 為選用項目,可移除,以提供可用於 mediaId 的穩定 ID。例如:

    • broadcastradio://program/RDS_PI/1234?AMFM_FREQUENCY=88500&AMFM_FREQUENCY=103300
    • broadcastradio://program/AMFM_FREQUENCY/102100
    • broadcastradio://program/DAB_SID_EXT/14895264?RDS_PI=1234

    program 的權威部分 (又稱為主機) 可讓日後的配置文件擴充功能有更多空間。在 HAL 2.x 定義的 IdentifierType 中,ID 類型字串會精確指定為其名稱,而值格式則為十進位或十六進位 (含 0x 前置字元) 數字。

    所有供應商專屬 ID 都會以 VENDOR_ 前置字串表示。例如,VENDOR_0 代表 VENDOR_START,VENDOR_1 代表 VENDOR_START 加 1。這類 URI 僅適用於產生這些 URI 的無線電硬體,無法在不同原始設備製造商 (OEM) 製造的裝置之間轉移。

    這些 URI 必須指派給頂層廣播資料夾下的每個 MediaItem。此外,MediaSession 必須同時支援 playFromMediaId 和 playFromUri。不過,URI 主要用於擷取無線電中繼資料 (例如 FM 頻率) 和永久性儲存空間。我們無法保證 URI 可供所有媒體項目使用 (例如,當架構尚未支援主要 ID 類型時)。另一方面,Media ID 一律有效。不建議用戶端使用 URI 從目前的 MediaBrowser 工作階段選取項目。請改用 playFromMediaId。不過,這並非服務應用程式可選擇的做法,且缺少的 URI 僅適用於有充分理由的情況。

    初始設計使用單一冒號,而非在配置部分後方使用 :// 序列。不過,android.net.Uri 不支援絕對階層 URI 參照的情況。

    其他來源類型

    其他音訊來源的處理方式也類似。例如外部音源輸入和音訊 CD 播放器。

    單一應用程式可能會提供多種來源。在這種情況下,建議您為每種來源類型建立個別的 MediaBrowserService。即使在設定中有多個服務來源/MediaBrowserService,我們仍強烈建議在單一應用程式中使用單一 MediaSession。

    音訊 CD

    與音訊 CD 相似,提供此類光碟的應用程式會透過 MediaBrowser 提供單一可瀏覽的項目 (如果系統有 CD 變換器,則可提供多個項目),而該項目會包含特定 CD 的所有曲目。如果系統不知道每張 CD 上的曲目 (例如,當所有磁碟一次插入卡匣時,系統不會讀取所有磁碟),則整張磁碟的 MediaItem 就會是 PLAYABLE,而不是 BROWSABLE 加 PLAYABLE。如果特定插槽中沒有磁碟,該項目就不會是 PLAYABLE 或 BROWSABLE (但每個插槽都必須出現在樹狀結構中)。

     音訊 CD 樹狀結構
    圖 3 音訊 CD 樹狀結構。

    這些項目的標記方式與廣播電台資料夾類似,會包含 MediaDescription API 中定義的額外欄位:

    • EXTRA_CD_TRACK:音訊 CD 上的每個 MediaItem,以 1 為基底的曲目編號。
    • EXTRA_CD_DISK:以 1 為基底的磁碟編號。

    對於啟用 CD-Text 的系統和相容的磁碟,頂層 MediaItem 會具有磁碟的標題。同樣地,曲目的 MediaItems 會包含曲目名稱。

    輔助輸入

    提供輔助輸入的應用程式會公開 MediaBrowser 樹狀結構,其中包含一個項目 (或多個項目,如果存在多個通訊埠),代表 AUX 輸入通訊埠。相應的 MediaSession 會在取得 playFromMediaId 要求後,取得媒體 ID 並切換至該來源。

    AUX 樹狀結構
    圖 4. AUX 樹狀結構。

    每個 AUX MediaItem 項目都會有額外的欄位 EXTRA_AUX_PORT_NAME,其值為未經本地化的端口名稱,不含「AUX」字詞。舉例來說,「AUX 1」會設為「1」、「AUX front」會設為「front」,而「AUX」會設為空字串。在非英文語言代碼中,名稱標記會維持相同的英文字串。與 EXTRA_BCRADIO_BAND_NAME_EN 不同,這些值是由 OEM 定義,並未受限於預先定義的清單。

    如果硬體可偵測到連接至 AUX 連接埠的裝置,則只有在輸入連線時,硬體才應將 MediaItem 標示為 PLAYABLE。如果沒有任何裝置連接到這個通訊埠,硬體仍應列舉 (但不是 PLAYABLE)。如果硬體沒有這類功能,則 MediaItem 一律必須設為 PLAYABLE。

    其他欄位

    定義下列欄位:

    • EXTRA_CD_TRACK = "android.media.extra.CD_TRACK"
    • EXTRA_CD_DISK = "android.media.extra.CD_DISK"
    • EXTRA_AUX_PORT_NAME = "android.media.extra.AUX_PORT_NAME"

    用戶端需要檢查頂層 MediaItems,針對具有 EXTRA_CD_DISK 或 EXTRA_AUX_PORT_NAME 額外欄位集的元素。

    詳細範例

    以下範例說明此設計中所用來源類型的 MediaBrowser 樹狀結構。

    廣播電台 MediaBrowserService (處理 ACTION_PLAY_BROADCASTRADIO):

    • 電台 (可瀏覽)EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_PROGRAMS
      • BBC One (可播放) URI: broadcastradio://program/RDS_PI/1234?AMFM_FREQUENCY=90500
      • ABC 88.1 (可播放) URI: broadcastradio://program/RDS_PI/5678?AMFM_FREQUENCY=88100
      • ABC 88.1 HD1 (可播放) URI: broadcastradio://program/HD_STATION_ID_EXT/158241DEADBEEF?AMFM_FREQUENCY=88100&RDS_PI=5678
      • ABC 88.1 HD2 (可播放) URI: broadcastradio://program/HD_STATION_ID_EXT/158242DEADBEFE
      • 90.5 FM (可播放) - 沒有 RDSURI 的 FM: broadcastradio://program/AMFM_FREQUENCY/90500
      • 620 AM (可播放) URI: broadcastradio://program/AMFM_FREQUENCY/620
      • BBC One (可播放) URI:broadcastradio://program/DAB_SID_EXT/1E24102?RDS_PI=1234
    • 我的最愛 (可瀏覽、可播放)EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_FAVORITES
      • BBC One (可播放) URI:broadcastradio://program/RDS_PI/1234?AMFM_FREQUENCY=101300
      • BBC Two (無法播放)URI:broadcastradio://program/RDS_PI/1300?AMFM_FREQUENCY=102100
    • AM (可瀏覽、可播放): EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_BANDEXTRA_BCRADIO_BAND_NAME_EN="AM"
      • 530 AM (可播放) URI:broadcastradio://program/AMFM_FREQUENCY/530
      • 540 AM (可播放) URI:broadcastradio://program/AMFM_FREQUENCY/540
      • 550 AM (可播放) URI:broadcastradio://program/AMFM_FREQUENCY/550
    • FM (可瀏覽、可播放): EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_BANDEXTRA_BCRADIO_BAND_NAME_EN="FM"
      • 87.7 FM (可播放) URI:broadcastradio://program/AMFM_FREQUENCY/87700
      • 87.9 FM (可播放) URI:broadcastradio://program/AMFM_FREQUENCY/87900
      • 88.1 FM (可播放) URI:broadcastradio://program/AMFM_FREQUENCY/88100
    • DAB (可播放):EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_BANDEXTRA_BCRADIO_BAND_NAME_EN="DAB"

    音訊 CD MediaBrowserService (處理 ACTION_PLAY_AUDIOCD):

    • 光碟 1 (可播放) EXTRA_CD_DISK=1
    • 光碟 2 (可瀏覽、可播放) EXTRA_CD_DISK=2
      • 曲目 1 (可播放) EXTRA_CD_TRACK=1
      • 曲目 2 (可播放) EXTRA_CD_TRACK=2
    • 我的音樂 CD (可瀏覽、可播放) EXTRA_CD_DISK=3
      • All By Myself (可播放) EXTRA_CD_TRACK=1
      • Reise, Reise (playable) EXTRA_CD_TRACK=2
    • 空白的空格 4 (無法播放) EXTRA_CD_DISK=4

    AUX MediaBrowserService (處理 ACTION_PLAY_AUX):

    • AUX 前端 (可播放) EXTRA_AUX_PORT_NAME="front"
    • AUX 後 (可播放) EXTRA_AUX_PORT_NAME="rear"