Serviços de entrada de TV permitem que o usuário pause e retome a reprodução do canal usando APIs de time-shifting. O Android 7.0 expande o time-shifting ao permitir que o usuário salve várias sessões gravadas.
Os usuários podem programar gravações antecipadamente ou iniciar uma gravação enquanto assistem a um programa. Quando o sistema salva uma gravação, o usuário pode procurar, gerenciar e reproduzir a gravação usando o app de TV do sistema.
Se quiser fornecer recursos de gravação para seu serviço de entrada de TV, indique para o sistema que o app é compatível com gravação, implemente a capacidade de gravar programas, solucione e comunique erros ocorridos durante a gravação e gerencie as sessões gravadas.
Indicar compatibilidade com gravação
Para informar ao sistema que seu serviço de entrada de TV é compatível com gravação, defina o atributo android:canRecord no arquivo XML de metadados do serviço como true:
<tv-input xmlns:android="http://schemas.android.com/apk/res/android" android:canRecord="true" android:setupActivity="com.example.sampletvinput.SampleTvInputSetupActivity" />
Para ver mais informações sobre o arquivo de metadados do serviço, consulte Declarar seu serviço de entrada de TV no manifesto.
Como alternativa, você pode indicar o suporte à gravação no código usando estas etapas:
- No método
onCreatedo serviço de entrada de TV, crie um novo objetoTvInputInfousando a classeTvInputInfo.Builder. - Ao criar o novo objeto
TvInputInfo, chamesetCanRecord(true)antes de chamarbuildpara indicar que o serviço é compatível com gravação. - Registre o objeto
TvInputInfocom o sistema chamandoTvInputManager.updateTvInputInfo.
Gravar uma sessão
Depois que o serviço de entrada de TV registrar que é compatível com o recurso de gravação, o sistema chamará seu método TvInputService.onCreateRecordingSession quando precisar acessar a implementação de gravação do app. Implemente sua própria subclasse TvInputService.RecordingSession e retorne-a quando o callback onCreateRecordingSession for acionado. Essa subclasse é responsável por mudar para os dados de canal corretos, gravar os dados solicitados e comunicar o status do registro e os erros ao sistema.
Quando o sistema chamar RecordingSession.onTune, passando um URI de canal, acesse o canal especificado pelo URI. Notifique o sistema de que o app foi sintonizado no canal escolhido chamando notifyTuned ou, se o app não puder ser sintonizado no canal adequado, chame notifyError.
Em seguida, o sistema invoca o callback RecordingSession.onStartRecording. O app precisa começar a gravar imediatamente. Quando o sistema invoca esse callback, ele pode fornecer um URI que contém informações sobre o programa que está prestes a ser gravado.
Quando a gravação for concluída, copie esses dados para a tabela de dados RecordedPrograms.
Por fim, o sistema chama RecordingSession.onStopRecording. Nesse momento, o app precisa parar de gravar imediatamente. Você também precisa criar uma entrada na
RecordedPrograms
tabela que inclua o URI de dados da sessão gravada na
RecordedPrograms.COLUMN_RECORDING_DATA_URI coluna, e qualquer informação do programa
que o sistema forneceu na chamada inicial para
onStartRecording.
Para mais detalhes sobre como acessar a
RecordedPrograms tabela,
consulte a seção Gerenciar sessões gravadas.
Solucionar erros de gravação
Se um erro ocorrer durante a gravação, e os dados gravados foram inutilizados, notifique o sistema chamando notifyError.
Você também pode chamar notifyError depois que uma sessão de gravação for criada para informar ao sistema que o app não pode mais gravar sessões.
Se ocorrer um erro durante a gravação, mas você quiser fornecer uma gravação parcial que possa ser usada pelos usuários para reprodução, chame 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 os apps de canais com recursos de gravação na tabela de provedor de conteúdo RecordedPrograms. Essas informações podem ser acessadas pelos URIs de gravação de conteúdo RecordedPrograms. Use APIs de provedores de conteúdo para ler, adicionar e excluir entradas da tabela.
Para saber mais 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 alocar armazenamento para salvar sessões gravadas. Use 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, comece a gravar os dados assim que possível. Para facilitar esse processo, realize qualquer tarefa demorada imediatamente, como acessar e alocar o espaço de armazenamento, quando o sistema invocar o callback onCreateRecordingSession. Isso permite que você comece a gravar imediatamente quando o callback onStartRecording for acionado.