Supporto della registrazione dei contenuti

I servizi di input TV consentono all'utente di mettere in pausa e riprendere la riproduzione del canale utilizzando le API time-shifting. Android 7.0 estende 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. Dopo che il sistema salva una registrazione, l'utente può sfogliarla, gestirla e riprodurla utilizzando l'app TV di sistema.

Se vuoi fornire la 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 programmi, gestire e comunicare eventuali errori che si verificano durante la registrazione e gestire le sessioni registrate.

Indica il supporto per la registrazione

Per comunicare 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 ulteriori informazioni sul file dei metadati dei servizi, consulta la sezione Dichiarare il servizio di input TV nel file manifest.

In alternativa, puoi indicare il supporto della 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 servizio supporta la registrazione.
  3. Registra l'oggetto TvInputInfo nel sistema chiamando TvInputManager.updateTvInputInfo().

Registrare una sessione

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

Quando il sistema chiama RecordingSession.onTune(), passando l'URI di un canale, sintonizzati sul canale specificato dall'URI. Comunica al sistema che la tua app ha sintonizzato il canale desiderato chiamando il numero notifyTuned() oppure, se la tua app non riesce a sintonizzarsi sul canale appropriato, chiama il numero notifyError().

Il sistema richiama poi il callback RecordingSession.onStartRecording(). L'app deve iniziare a registrare immediatamente. 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 dati RecordedPrograms.

Infine, il sistema chiama RecordingSession.onStopRecording(). A questo punto, la registrazione dell'app deve interrompersi immediatamente. Devi inoltre creare una voce nella tabella RecordedPrograms che includa l'URI dei dati della sessione registrato nella colonna RecordedPrograms.COLUMN_RECORDING_DATA_URI ed eventuali informazioni sul programma fornite dal sistema nella chiamata iniziale a onStartRecording().

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

Gestire gli errori di registrazione

Se si verifica un errore durante la registrazione e i dati registrati diventano inutilizzabili, avvisa il sistema chiamando notifyError(). Puoi anche chiamare notifyError() dopo aver creato 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 agli utenti una registrazione parziale per la riproduzione, chiama notifyRecordingStopped() per consentire al sistema di utilizzare la sessione parziale.

Gestire le sessioni registrate

Il sistema conserva le informazioni relative a tutte le sessioni registrate da tutte le app del canale in grado di registrare nella tabella dei fornitori di contenuti RecordedPrograms. Queste informazioni sono accessibili tramite gli URI di registrazione dei contenuti RecordedPrograms. Utilizza le API del fornitore di contenuti per leggere, aggiungere ed eliminare voci da questa tabella.

Per ulteriori informazioni sull'utilizzo dei dati del fornitore di contenuti, consulta Nozioni di base sui fornitori di contenuti.

Best practice

Lo spazio di archiviazione dei dispositivi TV potrebbe essere limitato, quindi valuta con attenzione quando assegni spazio di archiviazione per salvare le sessioni registrate. Utilizza RecordingCallback.onError(RECORDING_ERROR_INSUFFICIENT_SPACE) quando non c'è abbastanza spazio per salvare una sessione registrata.

Quando l'utente avvia la registrazione, inizia a registrare i dati il prima possibile. Per facilitare questa operazione, completa eventuali attività dispendiose in termini di tempo, come l'accesso e l'allocazione dello spazio di archiviazione, quando il sistema richiama il callback onCreateRecordingSession(). In questo modo potrai iniziare a registrare immediatamente quando viene attivato il callback onStartRecording().