Los servicios de entrada de TV permiten al usuario pausar y reanudar la reproducción de canales mediante APIs de time-shifting Android 7.0 expande la función de pausa en directo permitiendo que el usuario guarde múltiples sesiones grabadas.
Los usuarios pueden programar las grabaciones con anticipación o comenzar a grabar mientras miran contenido. un programa. Una vez que el sistema guarda una grabación, el usuario puede explorar, administrar y reproducir la grabación con la app de TV del sistema.
Si quieres ofrecer la funcionalidad de grabación a tu servicio de entrada de TV, haz lo siguiente: debes indicar al sistema que tu app admite la grabación; implementar la capacidad de grabar programas, manejar y comunicar cualquier error que ocurra durante la grabación y administrar las sesiones grabadas.
Cómo indicar la compatibilidad con la grabación
Para indicarle al sistema que tu servicio de entrada de TV permite grabar, configura
el atributo android:canRecord
en el archivo en formato XML de metadatos de servicio
a true
:
<tv-input xmlns:android="http://schemas.android.com/apk/res/android" android:canRecord="true" android:setupActivity="com.example.sampletvinput.SampleTvInputSetupActivity" />
Para obtener más información sobre el archivo de metadatos del servicio, consulta Declara tu entrada de TV servicio en el manifiesto.
Como alternativa, puedes indicar la compatibilidad para la grabación en tu código usando estos pasos:
- En tu servicio de entrada de TV
onCreate()
método, crea un nuevo objetoTvInputInfo
con el ClaseTvInputInfo.Builder
. - Cuando crees el nuevo objeto
TvInputInfo
, llama asetCanRecord(true)
antes de llamarbuild()
para indicar que tu servicio admite la grabación. - Registra tu objeto
TvInputInfo
con el sistema llamando aTvInputManager.updateTvInputInfo()
Cómo grabar una sesión
Cuando el servicio de entrada de TV registre que admite la grabación
la funcionalidad, el sistema llama a tu
TvInputService.onCreateRecordingSession()
cuando necesita acceder
la implementación de grabación de tu app. Implementa el tuyo
la subclase TvInputService.RecordingSession
y mostrarla
cuando se activa la devolución de llamada onCreateRecordingSession()
Esta subclase es responsable
para cambiar a los datos del canal correcto, grabar los datos solicitados
y comunicar el estado y los errores de registro al sistema.
Cuando el sistema llama
RecordingSession.onTune()
, pasando un URI del canal, sintoniza el canal
que especifica el URI. Notifícale al sistema que tu app se sintonizó con el
canal deseado llamando
notifyTuned()
o, si tu app no puede sintonizarse en el canal correcto, llama
notifyError()
A continuación, el sistema invoca
RecordingSession.onStartRecording()
. Tu app debe comenzar a grabar
de inmediato. Cuando el sistema invoca esta devolución de llamada, puede proporcionar un URI
que contiene información acerca del programa que se está por grabar.
Cuando la grabación haya terminado, copia los datos en
RecordedPrograms
en la tabla de datos.
Por último, el sistema llama
RecordingSession.onStopRecording()
En este punto, tu app debe detenerse
a grabar de inmediato. También debes crear una entrada en la
RecordedPrograms
que incluya el URI de datos de la sesión registrada en el
RecordedPrograms.COLUMN_RECORDING_DATA_URI
y cualquier programa
información que el sistema proporcionó en la llamada inicial a
onStartRecording()
Para obtener más detalles sobre cómo acceder a la
Tabla RecordedPrograms
,
consulta la sección Administrar sesiones grabadas.
Cómo resolver los errores de grabación
Si se produce un error durante la grabación que hace que los datos grabados no se puedan usar,
notificar al sistema llamando
notifyError()
También puedes llamar
notifyError()
después de crear una sesión de grabación para informar al sistema
que tu app ya no pueda grabar sesiones.
Si se produce un error durante la grabación, pero quieres proporcionar una
la grabación parcial a los usuarios para su reproducción, llamar
notifyRecordingStopped()
para permitir que el sistema
usa la sesión parcial.
Cómo administrar sesiones grabadas
El sistema mantiene información de todas las sesiones grabadas de todos
de canales con capacidad para grabar
RecordedPrograms
proveedor de contenido. Se puede acceder a esta información a través del
RecordedPrograms
URI de registro de contenido. Usa las APIs del proveedor de contenido para
leer, agregar y borrar entradas de esta tabla.
Para obtener más información sobre cómo trabajar con datos del proveedor de contenido, consulta Conceptos básicos sobre el proveedor de contenido
Prácticas recomendadas
Es posible que el almacenamiento de los dispositivos de TV sea limitado, así que usa tu buen juicio para
y asignar almacenamiento
para guardar las sesiones grabadas. Usa
RecordingCallback.onError(RECORDING_ERROR_INSUFFICIENT_SPACE)
cuándo
no hay espacio suficiente para guardar una sesión grabada.
Cuando el usuario inicie la grabación, se empezarán a registrar los datos en cuanto
de la forma más eficaz posible. Para facilitar esto, completa
las tareas que requieren mucho tiempo por adelantado
como acceder y asignar espacio de almacenamiento, cuando el sistema invoca
onCreateRecordingSession()
. Esto te permite empezar
de forma inmediata cuando
Se activa la devolución de llamada onStartRecording()
.