![Android TV HAL 圖示](https://source.android.google.cn/static/docs/devices/tv/images/ape_fwk_hal_tv.png?authuser=0&hl=zh-tw)
Android TV 輸入架構 (TIF) 可簡化將直播內容提交至 Android TV 的程序。Android TIF 提供標準 API,方便製造商建立用於控制 Android TV 的輸入模組,並透過 TV 輸入功能發布的中繼資料,啟用即時電視搜尋和推薦功能。
此架構並未設法實作電視標準或區域規定,但確實讓裝置製造商更容易在不重新實作的情況下,滿足區域數位電視廣播標準。本節的說明文件或許也能協助想要建立自訂電視輸入來源的第三方應用程式開發人員。
元件
Android TV 輸入架構實作包含 TV 輸入管理器。TIF 可與 TV 應用程式搭配使用,這個系統應用程式無法由第三方應用程式取代,可用於存取內建和 IP 轉換器頻道。電視應用程式會透過電視輸入管理工具,與裝置製造商或其他方提供的電視輸入模組進行通訊。
電視輸入架構包含:
- 電視供應商 (
com.android.providers.tv.TvProvider
):包含頻道、節目和相關權限的資料庫 - TV App (
com.android.tv.TvActivity
):處理使用者互動的應用程式 - TV Input Manager (
android.media.tv.TvInputManager
):允許 TV Inputs 與 TV App 通訊 - 電視輸入:代表實體或虛擬調諧器和輸入埠的應用程式
- 電視輸入 HAL (
tv_input
模組):這項硬體定義可在實作時允許系統電視輸入裝置存取電視專用硬體 - 家長監護:可封鎖頻道和節目的技術
- HDMI-CEC:可透過 HDMI 遠端控制各種裝置的技術
- 調諧器架構:內建調諧器電視輸入裝置的架構
- MediaCas:條件式存取權架構
- 調諧器資源管理工具:管理電視輸入、MediaCas 和內建調諧器輸入的硬體資源
下文將詳細說明這些元件。如需 Android TV 輸入架構的詳細架構圖,請參閱下圖。
![Android TIF 架構總覽](https://source.android.google.cn/static/docs/devices/tv/images/TIF_Overview.png?authuser=0&hl=zh-tw)
流程
架構的運作方式如下:
- 使用者查看 TV 應用程式並進行互動,這是第三方應用程式無法取代的系統應用程式。
- TV 應用程式會顯示 TV 輸入裝置的 AV 內容。
- 電視應用程式無法直接與電視輸入裝置通訊。TV 輸入裝置管理工具會識別 TV 應用程式的 TV 輸入裝置狀態。如要進一步瞭解這些限制,請參閱下方的「TV 輸入裝置管理工具」。
權限
- 只有
signatureOrSystem
電視輸入和電視應用程式可完全存取電視供應商資料庫,並接收 KeyEvent。 - 只有系統電視輸入端才能透過 TV Input Manager 服務存取 TV Input HAL。電視輸入來源會透過 TV Input Manager 工作階段進行一對一存取。
- 第三方電視輸入來源有套件鎖定存取權,可存取電視供應商資料庫,且只能對相符的套件資料列進行讀取/寫入作業。
- 第三方電視輸入來源可以顯示自己的內容或來自裝置製造商的直通電視輸入來源 (例如 HDMI1)。無法顯示來自非直通電視輸入來源的內容,例如內建或 IPTV 調諧器。
- 硬體 TV 輸入應用程式的
TV_INPUT_HARDWARE
權限,可向 TV 輸入管理服務發出訊號,在啟動時通知 TV 輸入服務呼叫 TV 輸入管理服務,並新增 TV 輸入。這項權限可讓硬體 TV Input 應用程式支援每個 TV Input 服務的多個 TV Input,並能動態新增及移除所支援的 TV Input。
電視供應商
電視供應商資料庫會儲存電視輸入裝置的頻道和節目。電視供應商也會發布及管理相關聯的權限,讓電視輸入裝置只看見自己的記錄。舉例來說,特定電視輸入裝置只能觀看所提供的頻道和節目,且不得存取任何其他電視輸入裝置的頻道和節目。
電視供應商在內部將「廣播類型」對應至「標準類型」。TV 輸入內容會負責將「播送類型」填入基礎播送標準中的值,而「標準類型」欄位會自動填入 android.provider.TvContract.Genres
中的正確關聯類型。舉例來說,如果播送標準為 ATSC A/65,且節目類型為 0x25 (意即「運動」),TV 輸入會將「播送類型」填入字串「Sports」,而 TV 供應商會將「標準類型」欄位填入對應值 android.provider.TvContract.Genres.SPORTS
。
請參閱下方圖表,瞭解電視供應商的詳細檢視畫面。
![Android TV 供應商](https://source.android.google.cn/static/docs/devices/tv/images/TIF_TV_Provider.png?authuser=0&hl=zh-tw)
只有特權系統分割區中的應用程式可以讀取整個 TV Provider 資料庫。
直通電視輸入來源不會儲存頻道和節目。
除了頻道和節目的標準欄位外,TV 供應商資料庫也在每個資料表中提供 BLOB 類型欄位 COLUMN_INTERNAL_PROVIDER_DATA
,TV 輸入裝置可使用這個欄位儲存任意資料。這些 BLOB 資料可能包含自訂資訊 (例如相關調音器的頻率),且可以透過通訊協定緩衝區或其他形式提供。您可以使用可搜尋欄位,讓特定管道無法在搜尋中顯示 (例如,符合特定國家/地區的內容保護規定)。
資料庫欄位範例
電視供應商支援頻道 (android.provider.TvContract.Channels
) 和節目 (android.provider.TvContract.Programs
) 表格中的結構化資料。這些表格會由電視輸入和系統應用程式 (例如電視應用程式) 填入及存取。這些表格包含四種類型的欄位:
- 顯示: 顯示欄位包含應用程式可能想向使用者顯示的資訊,例如頻道名稱 (
COLUMN_DISPLAY_NAME
) 或編號 (COLUMN_DISPLAY_NUMBER
),或是正在觀看的節目名稱。 - 中繼資料:有三個欄位,可根據相關標準識別內容,例如頻道的傳輸串流 ID (
COLUMN_TRANSPORT_STREAM_ID
)、原始網路 ID (COLUMN_ORIGINAL_NETWORK_ID
) 和服務 ID (COLUMN_SERVICE_ID
)。 - 內部資料:自訂電視輸入使用的欄位。
部分欄位 (例如COLUMN_INTERNAL_PROVIDER_DATA
) 是可自訂的 BLOB 欄位,可讓 TV 輸入儲存頻道或節目的任意中繼資料。 - 標記: 標記欄位用來表示頻道是否應限制搜尋、瀏覽或觀看。這項設定只能在頻道層級設定。所有節目都會依照頻道設定生效。
COLUMN_SEARCHABLE
:在某些地區,可能需要限制部分管道的搜尋功能。COLUMN_SEARCHABLE = 0
表示頻道不應顯示在搜尋結果中。COLUMN_BROWSABLE
:僅供系統應用程式顯示。限制應用程式瀏覽管道。COLUMN_BROWSABLE = 0
表示頻道不應納入頻道清單。COLUMN_LOCKED
:僅供系統應用程式顯示。限制無效帳戶觀看頻道,除非輸入 PIN 碼。COLUMN_LOCKED = 1
表示頻道應受到家長監護功能保護。
如需更完整的欄位清單,請參閱 android/frameworks/base/media/java/android/media/tv/TvContract.java
權限和存取權控管
凡是可存取對應資料列的使用者,都能看到所有欄位。使用者無法直接存取任何欄位,只能看到 TV 應用程式、系統應用程式或 TV 輸入裝置的介面。
- 每個資料列都有
PACKAGE_NAME
,這是擁有該資料列的套件 (應用程式),可透過 TvProvider.java 查詢、插入、更新。電視輸入裝置只能存取自己寫入的資訊,且與其他電視輸入裝置提供的資訊隔離。 - 透過 AndroidManifest.xml 取得 READ、WRITE 權限 (需要使用者同意),以便判斷可用的管道。
- 只有
signatureOrSystem
應用程式可以取得ACCESS_ALL_EPG_DATA
權限,存取整個資料庫。
電視輸入來源管理員
TV Input Manager 會為整體 Android TV 輸入架構提供中央系統 API。可仲裁應用程式和電視輸入裝置間的互動,並提供家長監護功能。TV Input Manager 工作階段必須與 TV Inputs 一對一建立。電視輸入管理工具可讓應用程式存取已安裝的電視輸入內容,以便執行下列操作:
- 列出電視輸入來源,並檢查其狀態
- 建立工作階段及管理收聽者
針對工作階段,電視輸入可能只能由電視應用程式調整至其新增至電視供應商資料庫的 URI,但直通電視輸入設定可使用 TvContract.buildChannelUriForPassthroughInput()
進行調整。電視輸入裝置也可能有音量設定。由裝置製造商提供及簽署的 TV Inputs (簽名應用程式),或安裝在系統分區的其他應用程式,都能夠存取整個 TV 供應器資料庫。此存取權可用於建構應用程式,以瀏覽及搜尋所有可用的電視頻道和節目。
應用程式可能會使用 android.media.tv.TvInputManager
建立及註冊 TvInputCallback
,以便在電視輸入裝置狀態變更,或新增/移除電視輸入裝置時回呼。舉例來說,電視應用程式可以在電視輸入裝置連線中斷時做出回應,例如顯示為已中斷並防止選取。
TV Input Manager 會抽象化 TV 應用程式和 TV 輸入裝置之間的通訊。TV Input Manager 和 TV Input 的標準介面可讓多家裝置製造商建立自己的電視應用程式,同時協助所有第三方電視輸入來源在所有電視應用程式中運作。
電視輸入源
從 Android 應用程式的角度來看,TV 輸入裝置就是 Android 應用程式,因為它們有 AndroidManifest.xml,且已安裝 (透過 Play 商店、預先安裝或側載)。Android TV 支援預先安裝的系統應用程式、裝置製造商簽署的應用程式,以及第三方電視輸入。
有些輸入來源 (例如 HDMI 輸入端或內建調諧器輸入端) 只能由製造商提供,因為這些輸入端會直接與底層硬體通訊。其他功能 (例如 IPTV、轉移位置和外部 STB) 則可由第三方以 APK 形式提供至 Google Play 商店。下載並安裝後,即可在電視應用程式中選取新的輸入來源。
直通式輸入範例
![Android TV 系統輸入](https://source.android.google.cn/static/docs/devices/tv/images/TIF_HDMI_TV_Input.png?authuser=0&hl=zh-tw)
在這個範例中,裝置製造商提供的 TV Input 是可信任的,且具有 TV Provider 的完整存取權。它做為直通式電視輸入裝置,不會向電視供應商註冊任何頻道或節目。如要取得用於參照直通輸入的 URI,請使用 android.media.tv.TvContract
公用程式方法 buildChannelUriForPassthroughInput(String inputId)
。電視應用程式會與電視輸入管理員通訊,以便存取 HDMI 電視輸入端。
內建調諧器示例
![Android TV 內建調諧器輸入](https://source.android.google.cn/static/docs/devices/tv/images/Built-in_Tuner_TV_Input.png?authuser=0&hl=zh-tw)
在這個範例中,裝置製造商提供的內建調諧器 TV 輸入內容是可信任的,且具有 TV 供應者的完整存取權。
第三方輸入來源範例
![Android TV 第三方輸入](https://source.android.google.cn/static/docs/devices/tv/images/Third-party_Input_HDMI.png?authuser=0&hl=zh-tw)
在本例中,外部 STB TV 輸入是由第三方提供。由於電視輸入無法直接存取 HDMI 視訊輸入,因此必須透過電視輸入管理工具,並使用裝置製造商提供的 HDMI 電視輸入。
透過 TV Input Manager,外部 STB TV Input 可以與 HDMI TV Input 通訊,要求後者在 HDMI1 上顯示影片。因此,STB 電視輸入裝置可在製造商提供的 HDMI 電視輸入轉譯影片時控制電視。
子母畫面 (PIP) 範例
![Android TV KeyEvent](https://source.android.google.cn/static/docs/devices/tv/images/TIF_PIP-PAP.png?authuser=0&hl=zh-tw)
上圖顯示如何將遙控器上的按鈕傳送至特定電視輸入來源,以便顯示子母畫面 (PIP)。這些按鈕按壓動作會由裝置製造商提供的硬體驅動程式解讀,將硬體掃描碼轉換為 Android 按鍵碼,並將其傳遞至標準 Android 輸入管道
InputReader
和 InputDispatcher
函式,做為 KeyEvents。這些事件會觸發 TV 應用程式 (如果處於聚焦狀態) 的事件。
只有具備 RECEIVE_INPUT_EVENT
系統權限的系統電視輸入裝置,才有資格接收 InputEvents
。TV Input 負責決定要使用哪些 InputEvents,並應允許 TV 應用程式處理不需要使用的鍵。
TV 應用程式會負責確認哪個系統電視輸入裝置已啟用 (意即使用者選取的內容),並區分傳入的 KeyEvents
並轉送至正確的電視輸入管理員工作階段,並呼叫 dispatchInputEvent()
以將事件傳遞給相關聯的電視輸入裝置。
MHEG-5 輸入內容範例
下圖顯示更詳細的 KeyEvents
如何透過 Android TIF 轉送。
![Android TV 紅色按鈕示例](https://source.android.google.cn/static/docs/devices/tv/images/TIF_MHEG5_app.png?authuser=0&hl=zh-tw)
用於呈現紅色按鈕應用程式的流程,常見於歐洲,可讓使用者在電視上存取互動式應用程式。應用程式可透過這個傳輸串流傳送。點選按鈕後,使用者就能與這些廣播應用程式互動。舉例來說,您可以使用這些廣播應用程式存取相關網頁或運動比數。
請參閱「廣播應用程式」一節,瞭解廣播應用程式如何與 TV 應用程式互動。
在這個例子中:
- TV 應用程式位於焦點,且接收所有按鍵。
KeyEvents
(例如紅色按鈕) 會以InputEvents.
的形式傳遞至有效的 TV Input- 系統電視輸入裝置與 MHEG-5 堆疊整合,並具備
RECEIVE_INPUT_EVENT
系統權限。 - 收到啟用鍵碼 (例如紅色按鈕) 後,電視輸入功能會啟用廣播應用程式。
- 電視輸入會以
InputEvents
使用KeyEvents
,廣播應用程式會成為焦點並處理InputEvents
,直到關閉為止。
注意:第三方電視輸入裝置永遠不會收到按鍵。
電視輸入 HAL
TV Input HAL 可協助開發 TV 輸入功能,以存取電視專屬硬體。和其他 Android HAL 一樣,Android 開放原始碼計畫來源樹狀結構會提供電視輸入 HAL (tv_input
),而供應商會開發其實作項目。
注意:自 Android 14 起,電視輸入 HAL 介面會使用 AIDL 定義。
TV 應用程式
系統 TV 應用程式會向使用者顯示電視直播內容。參考電視應用程式 (電視直播) 會與 Android 平台一併提供,讓裝置製造商直接使用、自訂、擴充或取代。原始碼可在 Android 開放原始碼計畫中取得,您可以在「參考電視應用程式」一文中開始使用。
裝置製造商可以擴充電視應用程式來實作裝置製造商或國家/地區專屬功能,但這不在 TIF 或參考電視應用程式的涵蓋範圍內。
系統電視應用程式至少需要處理下列工作:
設定和配置
- 自動偵測電視輸入源
- 允許電視輸入裝置啟動頻道設定
- 控制家長監護設定
- 編輯頻道
查看中
- 存取及瀏覽所有電視頻道
- 存取電視節目資訊列
- 顯示電子節目表 (EPG) 資料
- 支援多個音訊和字幕音軌
- 提供家長監護 PIN 碼驗證方式
- 允許電視標準 (HbbTV 等) 顯示電視輸入使用者介面重疊畫面
- 為電視頻道和節目填入搜尋結果
- 顯示應用程式連結資訊卡
- 支援時間轉移 API
- 處理 DVR 功能並支援 TV recording API
隨著新的 Android 版本推出,平台 TIF API 擴充,這組功能也會隨之增加。CTS Verifier 可提供相容性測試涵蓋率。
支援第三方電視輸入
Android TV 為第三方電視輸入裝置提供開發人員 API,讓已安裝的應用程式可將軟體頻道納入電視直播體驗。為確保 Android 裝置實作相容性,系統 TV 應用程式必須負責向使用者顯示第三方 TV 輸入內容和頻道。參考的電視直播應用程式提供相容的實作方式;如果要取代系統 TV 應用程式,裝置製造商必須確保自家應用程式提供類似的相容性,以滿足所有 Android TV 裝置開發人員的期望。
系統電視應用程式必須在裝置的預設電視直播服務旁顯示第三方輸入內容。開發人員 API 的承諾,就是使用者能夠在標準電視體驗中尋找頻道 (安裝後即可)。
根據 Android CDD 的電視應用程式部分定義,系統允許內建頻道和第三方頻道之間的視覺差異。
以下各節說明如何讓直播電視應用程式符合 CDD 規定。
新頻道設定
新增第三方輸入/頻道時,使用者必須先在應用程式商店 (例如 Google Play) 中找到並安裝 TV 輸入裝置。
某些第三方電視輸入會自動將頻道新增至 TvProvider 資料庫。但是,大多數情況下都會提供設定活動,讓使用者自行設定頻道、提供登入詳細資料和其他動作。系統電視應用程式需要確保使用者能啟用這項設定活動,因此 CDD 要求第三方輸入內容必須是離開主要電視應用程式的最少導覽動作。
參考的直播電視應用程式提供「頻道來源」選單,可用於存取輸入內容。
![前往「設定」](https://source.android.google.cn/static/docs/devices/tv/images/LiveChannels_settings.png?authuser=0&hl=zh-tw)
![前往「設定」中的頻道來源](https://source.android.google.cn/static/docs/devices/tv/images/LiveChannels_channel_sources.png?authuser=0&hl=zh-tw)
![從清單中選取所需來源。](https://source.android.google.cn/static/docs/devices/tv/images/LiveChannels_sources.png?authuser=0&hl=zh-tw)
![從來源新增管道](https://source.android.google.cn/static/docs/devices/tv/images/LiveChannels_Add_channel.png?authuser=0&hl=zh-tw)
此外,安裝新 TvInput 後,TV 應用程式選單頂端會顯示通知卡片,讓使用者直接前往設定畫面:
![通知顯示有可用的新頻道來源。](https://source.android.google.cn/static/docs/devices/tv/images/LiveChannels_set_up_sources.png?authuser=0&hl=zh-tw)
如果使用者透過通知採取行動,則可以選取設定來源,如圖 10 所示。
如要瞭解開發人員在此方面的期望,請參閱「定義您的電視輸入服務」。
自訂頻道清單
裝置製造商可能會提供 UI,用來隱藏特定頻道,並讓使用者自行管理 EPG。電視直播節目包括電視網。
![在「設定」中開啟頻道清單。](https://source.android.google.cn/static/docs/devices/tv/images/LiveChannels_channel_list.png?authuser=0&hl=zh-tw)
![自訂頻道清單。](https://source.android.google.cn/static/docs/devices/tv/images/LiveChannels_customize_channel-list.png?authuser=0&hl=zh-tw)
電子節目表
第三方輸入開發人員須有信心,使用者可以在一般使用所有相容的 Android TV 裝置上,輕鬆前往自己的頻道。
第三方輸入來源的頻道必須顯示在裝置的標準直播電視體驗電子節目表中。您可以使用視覺分隔或獨立的第三方頻道類別 (請參閱 Android CDD 的電視應用程式部分),重點在於使用者能夠找到已安裝的頻道。
搜尋
製造商必須實作 TV 應用程式,納入全球搜尋要求的搜尋結果,以確保提供最佳使用者體驗。直播電視提供實作項目 (請參閱 這裡),可提供第三方輸入內容 (平台相容性必備) 和內建輸入內容的結果。
時間偏移
如果裝置搭載 Android 6.0 以上版本,TV 應用程式必須支援 Android 架構的 時間轉移 API。此外,製造商必須在電視應用程式中實作播放控制項,讓使用者能夠暫停、繼續、倒轉及快轉播放內容。
如果電視輸入來源支援時間移轉,電視應用程式就必須顯示播放控制項。
![播放控制項](https://source.android.google.cn/static/docs/devices/tv/images/TIF_timeshift.png?authuser=0&hl=zh-tw)
DVR
對於搭載 Android 7.0 以上版本的裝置,TV 應用程式必須支援 Android 架構 TV recording API,才能支援、列出及播放已錄製的節目。
這可讓裝置製造商將 DVR 子系統插入 TIF,大幅減少在電視裝置上啟用或整合 DVR 功能所需的整合工作量。這也讓第三方可以提供可插入 Android TV 裝置的售後 DVR 系統。
除了錄製直播內容,TV 應用程式還會處理資源衝突。舉例來說,如果裝置有兩個調諧器,就能同時錄製兩個節目。如果使用者要求錄製三個,TV 應用程式必須處理衝突,並應顯示通知,或要求使用者為這些要求安排優先順序。
TV 應用程式也可以實作更複雜的邏輯,例如在使用者要求錄製某集節目時,詢問使用者是否要錄製該系列節目的所有後續集數。
請參閱下圖,瞭解 Android TV 中可能的 DVR 實作方式。
![在 Android TV 中使用數位錄影功能](https://source.android.google.cn/static/docs/devices/tv/images/TV_Input_DVR.png?authuser=0&hl=zh-tw)
- TV Input Service 會告知 TV 應用程式可用的調諧器數量,以便 TV 應用程式處理可能的資源衝突。
- TV 應用程式收到使用者啟動的電視節目錄製要求。
- TV 應用程式會將錄影時間表儲存在內部資料庫中。
- 錄影時間到時,TV 應用程式會傳送要求,將頻道切換至與錄影相關聯的頻道。
- TV Input Service 會接收這項要求,並回應是否有適當的資源,然後切換至該頻道。
- 接著,TV 應用程式會將開始錄影的要求傳遞至 TV Input Manager。
- 電視輸入服務會收到這項要求,並開始錄製。
- TV Input Service 會將實際的影片資料儲存在儲存空間中,該儲存空間可以是外部儲存空間或雲端儲存空間。
- 錄製完成後,TV App 會將停止錄製要求傳遞至 TV Input Manager。
- 電視輸入服務收到要求後,就會停止錄製作業,並將相關聯的中繼資料新增至電視供應商,以便電視應用程式依要求向使用者顯示錄製內容。
如要進一步瞭解如何在 TV 輸入服務中實作錄影功能,請參閱這篇「電視錄影」文章。
實用資源
- Android CDD 和已記錄的開發人員 API 是最終參考資料。
- CTS 驗證工具會在相容性測試計畫中執行 API。針對 Live TV 執行這項操作,或許是查看 EPG、搜尋、家長監護和其他第三方輸入內容相關規定的實用方法。
- 如要瞭解開發人員在這方面的期望,請參閱「定義 TV 輸入服務」。
家長監護
家長監護功能可讓使用者封鎖不想觀看的頻道和節目,但只要輸入 PIN 碼,即可略過封鎖。
家長監護功能的責任由電視應用程式、電視輸入管理員服務、電視供應商和電視輸入共用。
家長監護功能為強制規定,並受 CTS Verifier 規範。
部分國家/地區已定義分級系統,電視輸入裝置可透過 TVContentRating API 使用這些系統。此外,電視輸入端可以註冊自己的自訂評分系統,如 CTS 驗證器測試所示,這會引入「假」評分。對於設有標準分級制度的國家/地區,我們建議裝置製造商將 TV Input Framework 家長監護功能與其他可能納入的機制結合。
電視服務供應商
每個頻道資料列都有 COLUMN_LOCKED
欄位,可用於鎖定特定頻道,讓使用者必須輸入 PIN 碼才能觀看。COLUMN_CONTENT_RATING
方案欄位是用於顯示,並非用於強制執行家長監護功能。
電視輸入來源管理器
TV Input Manager 會儲存每個遭封鎖的 TvContentRating
,並回應 isRatingBlocked()
,建議是否應封鎖具有指定分級的內容。
電視輸入
當顯示內容的評級變更 (在節目或頻道變更時),或家長監護設定變更 (在 ACTION_BLOCKED_RATINGS_CHANGED
和 ACTION_PARENTAL_CONTROLS_ENABLED_CHANGED
上) 時,TV 輸入會在 TV 輸入管理工具上呼叫 isRatingBlocked()
,檢查是否應封鎖目前的內容。如果應封鎖內容,TV 輸入會停用音訊和影像,並透過呼叫 notifyContentBlocked(TvContentRating)
通知 TV 應用程式,目前的內容已遭到封鎖。如果內容不應遭到封鎖,TV Input 會透過呼叫 notifyContentAllowed()
啟用音訊和視訊,並通知 TV App 目前允許的內容。
TV 應用程式
為了遵循家長監護 API 的規範,並建立相容的平台,系統電視應用程式需要提供一種方式,讓使用者管理家長監護功能,包括特定應用程式註冊的任何自訂分級。
當電視輸入裝置收到目前內容遭到封鎖或嘗試瀏覽遭封鎖的頻道時,TV 應用程式會顯示 PIN 碼 UI。
電視應用程式不會直接儲存家長監護設定。當使用者變更家長監護設定時,TV Input Manager 會儲存所有已封鎖的 TvContentRating
,而電視供應商則會儲存已封鎖的頻道。
如要變更家長監護設定,TV 應用程式必須宣告 android.permission.MODIFY_PARENTAL_CONTROLS
權限。
我們建議裝置製造商採取以下行動:
- 針對參考直播電視應用程式執行 CTS 驗證器家長控制項測試,以示範相容性要求。
- 使用 Live TV 應用程式做為自家 TV 應用程式的參考依據:請特別參閱 ContentRatingsManager 和 RatingSystemsFragment 來源,以及如何處理自訂分級。
HDMI-CEC
HDMI-CEC 可讓一項裝置控制另一項裝置,因此可透過單一遙控器控制家庭劇院中的多項家電。Android TV 會使用這項功能加快設定程序,並透過中央電視應用程式遠端控制各種電視輸入來源。舉例來說,這項功能可切換輸入來源、開啟或關閉裝置等。
Android TIF 實作了 HDMI-CEC 做為 HDMI 控管服務,因此裝置製造商只需要開發能與輕量 Android TV HAL 互動的低階驅動程式,就能略過更複雜的商業邏輯。在提供標準實作方式時,Android 會減少分散的實作方式和選定功能支援,藉此緩解相容性問題。HDMI Control Service 使用現有的 Android 服務,包括輸入和電源。
也就是說,現有的 HDMI-CEC 實作項目必須經過重新設計,才能與 Android TIF 互通。建議硬體平台包含微處理器,以便接收 CEC 開機和其他指令。
![在 Android TV 上整合 CEC](https://source.android.google.cn/static/docs/devices/tv/images/TV_App_CEC_integration.png?authuser=0&hl=zh-tw)
- CEC 匯流排會接收來自目前有效來源的指令,以便切換至其他來源。
- 驅動程式會將指令傳遞至 HDMI-CEC HAL。
- HAL 通知所有
ActiveSourceChangeListeners
。 - HDMI 控制服務會透過
ActiveSourceChangeListener
收到來源變更通知。 - TV Input Manager 服務會為 TV 應用程式產生意圖,以便切換來源。
- 接著,TV App 會為要切換的 TV Input 建立 TV Input Manager 工作階段,並在該工作階段中呼叫
setMain
。 - 電視輸入管理工具工作階段會將這項資訊傳遞至 HDMI 電視輸入端。
- 設定側邊頻表面的 HDMI 電視輸入要求。
- 在設定介面時,TV Input Manager Service 會產生相應的轉送控制指令,並傳回 HDMI Control Service。
電視整合指南
廣播應用程式
由於每個國家/地區都有廣播專屬的要求 (MHEG、Teletext、HbbTV 等),因此製造商應針對廣播應用程式提供自己的解決方案,例如:
- MHEG:原生堆疊
- 電傳文訊:原生堆疊
- HbbTV:Vewd Software 的 HbbTV 解決方案
在 Android L 版本中,Android TV 預期裝置製造商會使用系統整合器或適用於區域電視堆疊的 Android 解決方案,將介面傳遞至電視軟體堆疊,或傳遞必要的鍵碼來與舊版堆疊互動。
以下說明廣播應用程式和電視應用程式的互動方式:
- TV 應用程式處於聚焦狀態,可接收所有按鍵。
- TV 應用程式會將按鍵 (例如紅色按鈕) 傳遞至 TV Input 裝置。
- 電視輸入裝置內部整合了舊版電視堆疊。
- 收到啟用鍵碼 (例如紅色按鈕) 後,電視輸入裝置會啟用廣播應用程式。
- 直播應用程式會在 TV 應用程式中取得焦點,並處理使用者動作。
對於語音搜尋/推薦,廣播應用程式可能會支援應用程式內搜尋功能,以便使用者進行語音搜尋。