電視輸入服務可讓使用者透過 時間移轉 API。 Android 7.0 隨時間轉移擴充資料 讓使用者儲存多個已記錄的工作階段。
使用者可以預先排定錄製時間,也可以在觀看時開始錄影 方案。系統儲存錄製內容後,使用者就能瀏覽、管理 然後使用系統 TV 應用程式播放錄製內容。
如要在電視輸入服務中提供錄製功能, 您必須向系統說明您的應用程式支援錄製、實作 能夠錄製程式、處理並傳達任何發生的錯誤 ,以及管理錄影作業。
說明錄製功能支援
如要讓系統知道你的電視輸入服務支援錄影功能,請設定以下選項:
服務中繼資料 XML 檔案中的 android:canRecord
屬性
至 true
:
<tv-input xmlns:android="http://schemas.android.com/apk/res/android" android:canRecord="true" android:setupActivity="com.example.sampletvinput.SampleTvInputSetupActivity" />
如要進一步瞭解服務中繼資料檔案,請參閱 宣告電視輸入來源 定義服務
或者,您也可以使用以下項目,在程式碼中指出記錄支援: 步驟如下:
- 透過電視輸入服務「
onCreate()
」 方法,建立新的TvInputInfo
物件 (使用TvInputInfo.Builder
類別。 - 建立新的
TvInputInfo
物件時,請呼叫 撥打電話前須等待setCanRecord(true)
build()
表示 服務支援錄製功能。 - 透過呼叫
TvInputInfo
TvInputManager.updateTvInputInfo()
。
錄製課程
電視輸入服務註冊支援錄製功能後
系統會呼叫
TvInputService.onCreateRecordingSession()
方法 (必須在需要存取)
應用程式內的錄製實作。自行實作
TvInputService.RecordingSession
子類別並傳回
onCreateRecordingSession()
回呼觸發時。這個子類別負責
記錄要求的資料 (例如切換至正確的頻道資料)
以及將記錄狀態和錯誤傳達給系統。
當系統呼叫
RecordingSession.onTune()
,傳入頻道 URI,請調整至頻道
以及 URI 指定的通知系統您的應用程式已根據
呼叫所需管道,
notifyTuned()
或者,如果應用程式無法調到正確的頻道,請呼叫
notifyError()
。
接著系統會叫用
RecordingSession.onStartRecording()
回呼。您的應用程式必須開始錄製
立即生效系統叫用這個回呼時,可能會提供 URI
,其中包含即將要記錄的節目相關資訊。
記錄完成後,請將資料複製到
RecordedPrograms
資料表中的資料,
最後,系統會呼叫
RecordingSession.onStopRecording()
。此時,您的應用程式必須停止
錄製影片您也需要在
RecordedPrograms
這個表格列出了所記錄的工作階段資料 URI
RecordedPrograms.COLUMN_RECORDING_DATA_URI
欄和任何節目
系統在初次呼叫
onStartRecording()
。
想進一步瞭解如何存取
RecordedPrograms
資料表,
請參閱「管理已錄製的工作階段」部分。
處理錄製錯誤
如果錄音時發生錯誤,導致記錄資料無法使用,
透過
notifyError()
。
你也可以撥打
建立錄製工作階段後notifyError()
,讓系統知道
您的應用程式無法再記錄工作階段。
如果錄製時發生錯誤,但你想提供
僅供使用者播放部分錄影,請呼叫
notifyRecordingStopped()
:讓系統
使用部分工作階段
管理錄製的工作階段
系統會維護所有已記錄工作階段的資訊
支援錄製功能的頻道應用程式
RecordedPrograms
內容供應器表格。您可透過
RecordedPrograms
內容錄製 URI將內容供應器 API 用於
讀取、新增及刪除這個資料表中的項目。
如要進一步瞭解如何使用內容供應器資料,請參閱 內容供應器基礎知識。
最佳做法
電視裝置的儲存空間可能有限,因此請在
正在分配儲存空間,以便儲存已記錄的工作階段。使用
RecordingCallback.onError(RECORDING_ERROR_INSUFFICIENT_SPACE)
時間
空間不足,無法儲存錄製的工作階段。
使用者啟動記錄作業後,應立即開始記錄資料
。為了方便起見,請先完成所有前置費時
例如,當系統叫用
onCreateRecordingSession()
回呼。這麼做可以先
即時錄影
onStartRecording()
回呼會觸發。