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:
- Nel metodo
onCreate()
del servizio di input TV, crea un nuovo oggettoTvInputInfo
utilizzando la classeTvInputInfo.Builder
. - Quando crei il nuovo oggetto
TvInputInfo
, chiamasetCanRecord(true)
prima di chiamarebuild()
per indicare che il servizio supporta la registrazione. - Registra l'oggetto
TvInputInfo
nel sistema chiamandoTvInputManager.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()
.