借助 TV 输入服务,用户可以使用 时移 API。 Android 7.0 扩展了时移功能 方法是允许用户保存多个录制的会话
用户可以提前安排录制时间,也可以在观看节目时开始录制 一个程序。系统保存录音后,用户可以浏览、管理和 并使用系统 TV 应用播放录制的内容。
如果您想为 TV 输入服务提供录制功能, 您必须向系统表明您的应用支持录制, 能够录制节目、处理和传达发生的任何错误 以及管理录制的会话
指明支持录制
如需告知系统您的 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" />
如需详细了解服务元数据文件,请参阅 声明 TV 输入源 服务。
或者,您也可以使用 具体步骤:
- 在 TV 输入服务
onCreate()
中 方法,请使用TvInputInfo
TvInputInfo.Builder
类。 - 创建新的
TvInputInfo
对象时,请调用 通话前setCanRecord(true)
build()
即表示 服务支持录制。 - 通过调用在系统中注册
TvInputInfo
对象TvInputManager.updateTvInputInfo()
。
录制会话
TV 输入服务注册其支持录制后
功能时,系统会调用您的
TvInputService.onCreateRecordingSession()
方法需要访问时
应用的录制实现。实现您自己的
TvInputService.RecordingSession
子类并将其返回
在 onCreateRecordingSession()
回调触发时触发。这个子类负责
用于切换到正确的频道数据、记录请求的数据;
以及向系统传达录制状态和错误
当系统调用
RecordingSession.onTune()
,传入频道 URI,调到该频道
URI 所指定的地址通知系统您的应用已调到
调用所需的频道
notifyTuned()
,或者,如果您的应用无法调到正确的频道,请调用
notifyError()
。
接下来,系统会调用
RecordingSession.onStartRecording()
回调。您的应用必须开始录制
。当系统调用此回调时,可能会提供一个 URI
,其中包含即将录制的节目的相关信息。
录制完成后,请将此数据复制到
RecordedPrograms
数据表。
最后,系统会调用
RecordingSession.onStopRecording()
。此时,您的应用必须停止
录音。您还需要在
RecordedPrograms
表格(在
RecordedPrograms.COLUMN_RECORDING_DATA_URI
列,以及任何计划
系统首次调用
onStartRecording()
。
如需详细了解如何访问
RecordedPrograms
个表,
请参阅管理录制的会话部分。
处理录制错误
如果录制期间发生错误,导致录制的数据无法使用,
通过调用
notifyError()
。
您也可以呼叫
创建录制会话后发出 notifyError()
指令,以通知系统
您的应用无法再录制会话。
如果在录制过程中发生错误,但您希望提供
将部分录音发送给用户播放、
notifyRecordingStopped()
,使系统能够
使用部分会话。
管理录制的会话
系统会保留来自各个广告系列的所有已录制会话的信息
支持录制的频道应用
RecordedPrograms
content provider 表。此信息可通过
RecordedPrograms
内容录制 URI。使用 content provider API 实现以下目的:
读取、添加和删除此表中的条目。
如需详细了解如何使用内容提供程序数据,请参阅 <ph type="x-smartling-placeholder"></ph> content provider 基础知识。
最佳做法
TV 设备的存储空间可能有限,因此请自行判断
分配存储空间以保存录制的会话。使用
当发生以下情况时,RecordingCallback.onError(RECORDING_ERROR_INSUFFICIENT_SPACE)
空间不足,无法保存录制的会话。
当用户发起录制时,尽快开始录制数据
。为此,请完成所有预先耗时的任务
比如访问和分配存储空间
onCreateRecordingSession()
回调。这样你就可以开始
立即录制
触发 onStartRecording()
回调。