Supporto della registrazione dei contenuti

I servizi di input TV consentono all'utente di mettere in pausa e riprendere la riproduzione dei canali utilizzando le API di time-shifting. Android 7.0 espande il time-shifting consentendo all'utente di salvare più sessioni registrate.

Gli utenti possono programmare le registrazioni in anticipo o avviare una registrazione mentre guardano un programma. Una volta che il sistema salva una registrazione, l'utente può sfogliare, gestire e riprodurre la registrazione utilizzando l'app TV di sistema.

Se vuoi fornire funzionalità di registrazione per il tuo servizio di input TV, devi indicare al sistema che la tua app supporta la registrazione, implementare la possibilità di registrare i programmi, gestire e comunicare eventuali errori che si verificano durante la registrazione e gestire le sessioni registrate.

Indicare il supporto per la registrazione

Per indicare al sistema che il tuo servizio di input TV supporta la registrazione, imposta l'attributo android:canRecord nel file XML dei metadati del servizio su true:

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

Per saperne di più sul file dei metadati del servizio, consulta Dichiarare il servizio di input TV nel manifest.

In alternativa, puoi indicare il supporto per la registrazione nel codice seguendo questi passaggi:

  1. Nel metodo onCreate del servizio di input TV, crea un nuovo oggetto TvInputInfo utilizzando la classe TvInputInfo.Builder.
  2. Quando crei il nuovo oggetto TvInputInfo, chiama setCanRecord(true) prima di chiamare build per indicare che il tuo servizio supporta la registrazione.
  3. Registra l'oggetto TvInputInfo con il sistema chiamando TvInputManager.updateTvInputInfo.

Registrare una sessione

Dopo che il servizio di input TV ha registrato il supporto per la funzionalità di registrazione, il sistema chiama il metodo TvInputService.onCreateRecordingSession quando deve accedere all'implementazione della registrazione dell'app. Implementa la tua sottoclasse TvInputService.RecordingSession e restituiscila quando viene attivato il callback onCreateRecordingSession. Questa sottoclasse è responsabile del passaggio ai dati del canale corretti, della registrazione dei dati richiesti e della comunicazione dello stato e degli errori di registrazione al sistema.

Quando il sistema chiama RecordingSession.onTune, passando un URI del canale, sintonizzati sul canale specificato dall'URI. Notifica al sistema che la tua app si è sintonizzata sul canale scelto chiamando notifyTuned o, se la tua app non riesce a sintonizzarsi sul canale corretto, chiama notifyError.

Il sistema richiama quindi il callback RecordingSession.onStartRecording. La tua app deve iniziare immediatamente la registrazione. Quando il sistema richiama questo callback, potrebbe fornire un URI contenente informazioni sul programma che sta per essere registrato. Al termine della registrazione, copia questi dati nella tabella dei dati RecordedPrograms.

Infine, il sistema chiama RecordingSession.onStopRecording. A questo punto, la tua app deve interrompere immediatamente la registrazione. Devi anche creare una voce nella RecordedPrograms tabella che includa l'URI dei dati della sessione registrata nella RecordedPrograms.COLUMN_RECORDING_DATA_URI colonna e tutte le informazioni sul programma fornite dal sistema nella chiamata iniziale a onStartRecording.

Per maggiori dettagli su come accedere alla RecordedPrograms tabella, consulta la sezione Gestire le sessioni registrate.

Gestire gli errori di registrazione

Se si verifica un errore durante la registrazione, che comporta dati registrati inutilizzabili, notifica il sistema chiamando notifyError. Puoi anche chiamare notifyError dopo la creazione di una sessione di registrazione per comunicare al sistema che la tua app non può più registrare sessioni.

Se si verifica un errore durante la registrazione, ma vuoi fornire una registrazione parziale agli utenti per la riproduzione, chiama notifyRecordingStopped per consentire al sistema di utilizzare la sessione parziale.

Gestire le sessioni registrate

Il sistema conserva le informazioni di tutte le sessioni registrate da tutte le app dei canali con funzionalità di registrazione nella tabella del content provider RecordedPrograms. Queste informazioni sono accessibili tramite gli URI di registrazione dei contenuti RecordedPrograms. Utilizza le API del content provider per leggere, aggiungere ed eliminare voci da questa tabella.

Per saperne di più sull'utilizzo dei dati del content provider, consulta Nozioni di base sui content provider.

Best practice

I dispositivi TV potrebbero avere spazio di archiviazione limitato, quindi usa il tuo giudizio migliore quando allochi spazio di archiviazione per salvare le sessioni registrate. Utilizza RecordingCallback.onError(RECORDING_ERROR_INSUFFICIENT_SPACE) quando non è disponibile spazio sufficiente per salvare una sessione registrata.

Quando l'utente avvia la registrazione, inizia a registrare i dati il prima possibile. Per facilitare questa operazione, completa tutte le attività iniziali che richiedono tempo, come l'accesso e l'allocazione dello spazio di archiviazione, quando il sistema richiama il callback onCreateRecordingSession. In questo modo, puoi iniziare a registrare immediatamente quando viene attivato il callback onStartRecording.