支援內容錄製

電視輸入服務可讓使用者透過時間轉移 API 暫停及繼續播放頻道。Android 7.0 會隨時間轉移展開,使用者可以儲存多個記錄的工作階段。

使用者可以預先排定錄影時間,或是在觀看節目時開始錄製。系統儲存錄製內容後,使用者可以透過系統電視應用程式瀏覽、管理及播放錄製內容。

如果想為電視輸入服務提供錄製功能,您必須向系統表明應用程式支援錄製、實作錄製節目、處理及傳達錄製期間發生的錯誤,以及管理錄製的工作階段。

指出支援錄製功能

如要告知系統您的電視輸入服務支援錄製功能,請將服務中繼資料 XML 檔案中的 android:canRecord 屬性設為 true

<tv-input xmlns:android="http://schemas.android.com/apk/res/android"
  android:canRecord="true"
  android:setupActivity="com.example.sampletvinput.SampleTvInputSetupActivity" />

如要進一步瞭解服務中繼資料檔案,請參閱「在資訊清單中宣告電視輸入服務」。

或者,您也可以在程式碼中,使用以下步驟指出記錄支援:

  1. 在電視輸入服務 onCreate() 方法中,使用 TvInputInfo.Builder 類別建立新的 TvInputInfo 物件。
  2. 建立新的 TvInputInfo 物件時,請先呼叫 setCanRecord(true) 再呼叫 build(),以表示您的服務支援錄製功能。
  3. 呼叫 TvInputManager.updateTvInputInfo(),向系統註冊 TvInputInfo 物件。

錄製課程內容

電視輸入服務註冊可支援錄製功能後,當系統需要存取應用程式的錄製實作時,就會呼叫 TvInputService.onCreateRecordingSession() 方法。實作自己的 TvInputService.RecordingSession 子類別,並在 onCreateRecordingSession() 回呼觸發時傳回該子類別。這個子類別負責切換正確的管道資料、記錄要求的資料,以及將記錄狀態和錯誤傳送到系統。

當系統呼叫 RecordingSession.onTune() 並傳入管道 URI 時,請調整至 URI 指定的管道。呼叫 notifyTuned(),告知系統應用程式已調整至所需版本;如果應用程式無法轉到正確的管道,請呼叫 notifyError()

系統接著會叫用 RecordingSession.onStartRecording() 回呼。您的應用程式必須立即開始錄製。當系統叫用這個回呼時,可能會提供 URI,其中包含即將記錄的程式資訊。記錄完成後,請將此資料複製到 RecordedPrograms 資料表。

最後,系統會呼叫 RecordingSession.onStopRecording()。此時,應用程式必須立即停止錄製。您也需要在 RecordedPrograms 資料表中建立項目,其中包含 RecordedPrograms.COLUMN_RECORDING_DATA_URI 欄中的記錄工作階段資料 URI,以及系統在初始呼叫 onStartRecording() 中提供的任何程式資訊。

如要進一步瞭解如何存取 RecordedPrograms 資料表,請參閱「管理記錄的工作階段」一節。

處理錄製錯誤

如果記錄期間發生錯誤,導致記錄資料無法使用,請呼叫 notifyError() 來通知系統。您也可以在建立錄製工作階段後呼叫 notifyError(),讓系統知道應用程式無法再錄製工作階段。

如果錄製期間發生錯誤,但您想為使用者提供部分錄音檔進行播放,請呼叫 notifyRecordingStopped() 以讓系統使用部分工作階段。

管理錄製的工作階段

針對來自 RecordedPrograms 內容供應器資料表中,所有可錄製的管道應用程式,系統會維護所有錄製工作階段的資訊。您可以透過 RecordedPrograms 內容記錄 URI 存取這項資訊。使用內容供應器 API 讀取、新增及刪除這個資料表中的項目。

如要進一步瞭解如何使用內容供應器資料,請參閱「 內容供應器基礎知識」。

最佳做法

電視裝置的儲存空間可能有限,因此在分配儲存空間以節省錄影工作階段時,請自行斟酌。如果空間不足以儲存錄製的工作階段,請使用 RecordingCallback.onError(RECORDING_ERROR_INSUFFICIENT_SPACE)

使用者啟動錄製程序時,請盡快開始記錄資料。為促進這種情況,請在系統叫用 onCreateRecordingSession() 回呼時,完成所有耗時的工作,例如存取及分配儲存空間。這樣做可讓您在 onStartRecording() 回呼觸發時,立即開始錄製。