Suporte para gravação de conteúdo

Os serviços de entrada de TV permitem que o usuário pause e retome a reprodução do canal usando APIs de time-shifting. Android 7.0 expande o time-shifting permitindo que o usuário salve várias sessões gravadas.

Os usuários podem programar gravações com antecedência ou iniciar uma enquanto assistem de um programa. Quando o sistema salva uma gravação, o usuário pode navegar, gerenciar e reproduzir a gravação usando o app de TV do sistema.

Se você quiser oferecer a funcionalidade de gravação no seu serviço de entrada para TV, faça o seguinte: você deve indicar ao sistema que seu aplicativo é compatível com gravação, implementar capacidade de gravar programas, processar e comunicar erros ocorridos e gerencie suas sessões gravadas.

Indicar compatibilidade com gravação

Para informar ao sistema que seu serviço de entrada de TV oferece suporte a gravação, defina o atributo android:canRecord no arquivo XML de metadados do serviço para true:

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

Para mais informações sobre o arquivo de metadados de serviço, consulte Declarar a entrada de TV serviço no manifesto.

Como alternativa, indique suporte para gravação no código usando estas etapas:

  1. No serviço de entrada de TV onCreate() método, crie um novo objeto TvInputInfo usando o classe TvInputInfo.Builder.
  2. Ao criar o novo objeto TvInputInfo, chame setCanRecord(true) antes de ligar build() para indicar que suporte a gravação.
  3. Registre seu objeto TvInputInfo com o sistema chamando TvInputManager.updateTvInputInfo().

Gravar uma sessão

Depois que o serviço de entrada de TV registrar que oferece suporte a gravação funcionalidade, o sistema chama método TvInputService.onCreateRecordingSession() quando ele precisar acessar implementação de gravação do seu app. Implemente as suas próprias TvInputService.RecordingSession e a retornar quando o callback onCreateRecordingSession() é acionado. Essa subclasse é responsável para alternar para os dados de canal corretos, gravar os dados solicitados e comunicar o status e os erros do registro ao sistema.

Quando o sistema chamar RecordingSession.onTune(), transmitindo um URI de canal, acesse o canal especificado pelo URI. Notifica o sistema de que seu app ajustou a o canal desejado chamando notifyTuned() ou, caso o app não consiga acessar o canal correto, ligue notifyError().

Em seguida, o sistema invoca RecordingSession.onStartRecording(). O app precisa iniciar a gravação imediatamente. Quando o sistema invoca esse callback, ele pode fornecer um URI. que contém informações sobre o programa que será gravado. Quando a gravação for concluída, copie esses dados para o RecordedPrograms tabela de dados.

Por fim, o sistema chama RecordingSession.onStopRecording(): Nesse momento, o app precisa parar a gravação imediatamente. Você também precisa criar uma entrada no RecordedPrograms que inclua o URI dos dados da sessão gravada no a coluna RecordedPrograms.COLUMN_RECORDING_DATA_URI, e os programas informações que o sistema forneceu na chamada inicial para onStartRecording()

Para mais detalhes sobre como acessar o tabela RecordedPrograms, consulte a seção Gerenciar sessões gravadas.

Solucionar erros de gravação

Se ocorrer um erro durante a gravação, e os dados gravados forem inutilizáveis, notificar o sistema chamando notifyError(): Você também pode chamar notifyError() após a criação de uma sessão de gravação para informar ao sistema que o app não possa mais gravar sessões.

Se ocorrer um erro durante a gravação, mas você quiser fornecer uma gravação parcial para usuários para reprodução, chamada notifyRecordingStopped() para permitir que o sistema use a sessão parcial.

Gerenciar sessões gravadas

O sistema mantém as informações de todas as sessões gravadas de todos apps de canais com recursos de gravação RecordedPrograms na tabela do provedor de conteúdo. Essas informações estão acessíveis no RecordedPrograms URIs de gravação de conteúdo. Use APIs de provedores de conteúdo para ler, adicionar e excluir entradas dessa tabela.

Para mais informações sobre como trabalhar com dados de provedores de conteúdo, consulte Fundamentos do provedor de conteúdo.

Práticas recomendadas

Dispositivos de TV podem ter armazenamento limitado, então tenha bom senso ao alocando armazenamento para salvar sessões gravadas. Usar RecordingCallback.onError(RECORDING_ERROR_INSUFFICIENT_SPACE) quando não houver espaço suficiente para salvar uma sessão gravada.

Quando o usuário iniciar a gravação, inicie o registro de dados assim que possível possível. Para facilitar, conclua as tarefas iniciais demoradas, como acessar e alocar espaço de armazenamento, quando o sistema invoca onCreateRecordingSession(). Isso permite que você comece gravando imediatamente quando O callback onStartRecording() é acionado.