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:
- No serviço de entrada de TV
onCreate()
método, crie um novo objetoTvInputInfo
usando o classeTvInputInfo.Builder
. - Ao criar o novo objeto
TvInputInfo
, chamesetCanRecord(true)
antes de ligarbuild()
para indicar que suporte a gravação. - Registre seu objeto
TvInputInfo
com o sistema chamandoTvInputManager.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.