Los servicios de entrada de TV permiten al usuario pausar y reanudar la reproducción de canales por medio de las API de pausa en directo. Android 7.0 amplía las funciones de pausa en directo, ya que le permite al usuario guardar varias sesiones grabadas.
Los usuarios pueden programar las grabaciones con anticipación o comenzar a grabar cuando están mirando un programa. Una vez que el sistema haya guardado una grabación, el usuario puede explorarla, administrarla y reproducirla por medio de la app para TV del sistema.
Si deseas proporcionar funcionalidades de grabación para tu servicio de entrada de TV, debes indicarle al sistema que tu app admite la grabación, implementar la capacidad para grabar programas, y controlar y comunicar los errores que puedan producirse.
Cómo indicar la compatibilidad con la grabación
Para comunicarle al sistema que tu servicio de entrada de TV permite la grabación, configura el atributo android:canRecord
de tu archivo XML de metadatos de servicio en 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 de servicio, consulta Cómo declarar tu servicio de entrada de TV en el manifiesto.
De manera alternativa, puedes indicar la compatibilidad con la grabación en tu código; para ello, sigue estos pasos:
- En el método
onCreate()
del servicio de entrada de TV, crea un nuevo objetoTvInputInfo
con la claseTvInputInfo.Builder
. - Cuando crees el nuevo objeto
TvInputInfo
, llama asetCanRecord(true)
antes de llamar abuild()
para indicar que tu servicio permite la grabación. - Registra tu objeto
TvInputInfo
con el sistema llamando aTvInputManager.updateTvInputInfo()
.
Cómo grabar una sesión
Después de que el servicio de entrada de TV registra la compatibilidad con la funcionalidad de grabación, el sistema llama al método TvInputService.onCreateRecordingSession()
cuando necesita acceder a la implementación de grabación de tu app. Implementa tu propia subclase TvInputService.RecordingSession
y muéstrala cuando se active la devolución de llamada de onCreateRecordingSession()
. Esta subclase se encarga de cambiar a los datos del canal correcto, grabar los datos solicitados, y comunicar el estado y los errores de grabación al sistema.
Cuando el sistema llama a RecordingSession.onTune()
y le pasa un URI de canal, sintoniza el canal que el URI especifica y notifícale al sistema que tu aplicación se sintonizó en el canal deseado. Para ello, llama a notifyTuned()
o, si tu app no pudo sintonizarse en el canal correcto, llama a notifyError()
.
A continuación, el sistema invoca la devolución de llamada RecordingSession.onStartRecording()
, así que tu app debe comenzar a grabar inmediatamente. Cuando el sistema invoca esta devolución de llamada, puede brindar un URI que contiene información sobre el programa que se está por grabar.
Cuando la grabación finalice, copiarás estos datos en la tabla de datos RecordedPrograms
.
Por último, el sistema llama a RecordingSession.onStopRecording()
. En este punto, tu app debe dejar de grabar inmediatamente. También debes crear una entrada en la tabla RecordedPrograms
que incluya el URI de datos de la sesión grabada en la columna RecordedPrograms.COLUMN_RECORDING_DATA_URI
y cualquier información del programa que el sistema haya brindado en la llamada inicial a onStartRecording()
.
Para obtener más información sobre cómo acceder a la tabla RecordedPrograms
, consulta Cómo administrar las sesiones grabadas.
Cómo resolver los errores de grabación
Si durante la grabación se produce algún error que hace que no se puedan usar sus datos, debes notificar al sistema mediante una llamada a notifyError()
. De manera similar, puedes llamar a notifyError()
después de crear una sesión de grabación para informarle al sistema que tu app ya no puede grabar sesiones.
Si se produce un error durante la grabación, pero quieres darle a los usuarios una grabación parcial para reproducir, llama a notifyRecordingStopped()
a fin de permitir que el sistema use la sesión parcial.
Cómo administrar sesiones grabadas
El sistema mantiene información de todas las sesiones grabadas de todas las aplicaciones de canal con funcionalidad de grabación en la tabla de proveedores de contenido RecordedPrograms
. Se puede acceder a esta información mediante los URI de grabación de contenido de RecordedPrograms
. Usa las API de proveedor de contenido para leer, agregar y borrar entradas de esta tabla.
Para obtener más información sobre cómo trabajar con los datos de los proveedores de contenido, consulta Conceptos básicos sobre proveedores de contenido.
Recomendaciones
Es posible que los dispositivos de TV tengan almacenamiento limitado, por lo que debes ser cuidadoso a la hora de asignar el almacenamiento para guardar las sesiones grabadas. Usa RecordingCallback.onError(RECORDING_ERROR_INSUFFICIENT_SPACE)
cuando no haya espacio suficiente para guardar una sesión grabada.
Cuando el usuario inicie la grabación, debes empezar a grabar los datos lo antes posible. Para facilitar este proceso, completa cualquier tarea anterior que demande mucho tiempo, como acceder al espacio de almacenamiento y asignarlo, cuando el sistema invoque la devolución de llamada onCreateRecordingSession()
. De esta manera, podrás comenzar a grabar inmediatamente después de que se active la devolución de llamada onStartRecording()
.