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:
- Nel metodo
onCreatedel servizio di input TV, crea un nuovo oggettoTvInputInfoutilizzando la classeTvInputInfo.Builder. - Quando crei il nuovo oggetto
TvInputInfo, chiamasetCanRecord(true)prima di chiamarebuildper indicare che il tuo servizio supporta la registrazione. - Registra l'oggetto
TvInputInfocon il sistema chiamandoTvInputManager.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.