電視輸入服務可讓使用者透過時移 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" />
如要進一步瞭解服務中繼資料檔案,請參閱「在資訊清單中宣告電視輸入服務」。
或者,您也可以按照下列步驟,在程式碼中指出錄製支援:
- 在電視輸入服務的
onCreate方法中,使用TvInputInfo.Builder類別建立新的TvInputInfo物件。 - 建立新的
TvInputInfo物件時,請先呼叫setCanRecord(true),再呼叫build,指出服務支援錄音功能。 - 呼叫
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 回呼觸發時,您就能立即開始錄製。