Compatibilité avec l'enregistrement de contenu

Les services d'entrée TV permettent à l'utilisateur de mettre en pause et de reprendre la lecture d'une chaîne à l'aide de API de décalage temporel. Android 7.0 étend le décalage temporel en permettant à l'utilisateur d'enregistrer plusieurs sessions.

Les utilisateurs peuvent planifier des enregistrements à l'avance ou en lancer un pendant qu'ils regardent une émission. Une fois l'enregistrement effectué, l'utilisateur peut le parcourir, le gérer et le lire à l'aide de l'application TV du système.

Si vous souhaitez fournir une fonctionnalité d'enregistrement pour votre service d'entrée TV, vous devez indiquer au système que votre application est compatible avec l'enregistrement, implémenter la possibilité d'enregistrer des programmes, gérer et communiquer les erreurs qui se produisent pendant l'enregistrement, et gérer vos sessions enregistrées.

Indiquer la compatibilité avec l'enregistrement

Pour indiquer au système que votre service d'entrée TV est compatible avec l'enregistrement, définissez l'attribut android:canRecord sur true dans le fichier XML de métadonnées de votre service :

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

Pour en savoir plus sur le fichier de métadonnées du service, consultez Déclarer votre service d'entrée TV dans le fichier manifeste.

Vous pouvez également indiquer la compatibilité avec l'enregistrement dans votre code en procédant comme suit :

  1. Dans la méthode onCreate de votre service d'entrée TV, créez un nouvel objet TvInputInfo à l'aide de la classe TvInputInfo.Builder.
  2. Lorsque vous créez l'objet TvInputInfo, appelez setCanRecord(true) avant d'appeler build pour indiquer que votre service est compatible avec l'enregistrement.
  3. Enregistrez votre TvInputInfo objet auprès du système en appelant TvInputManager.updateTvInputInfo.

Enregistrer une session

Une fois que votre service d'entrée TV a enregistré sa compatibilité avec la fonctionnalité d'enregistrement, le système appelle votre méthode TvInputService.onCreateRecordingSession lorsqu'il doit accéder à l'implémentation de l'enregistrement de votre application. Implémentez votre propre sous-classe TvInputService.RecordingSession et renvoyez-la lorsque le rappel onCreateRecordingSession se déclenche. Cette sous-classe est chargée de passer aux données de canal appropriées, d'enregistrer les données demandées et de communiquer l'état d'enregistrement et les erreurs au système.

Lorsque le système appelle RecordingSession.onTune en transmettant un URI de canal, réglez-vous sur le canal spécifié par l'URI. Indiquez au système que votre application s'est réglée sur le canal choisi en appelant notifyTuned. Si votre application ne peut pas se régler sur le canal approprié, appelez notifyError.

Le système appelle ensuite le rappel RecordingSession.onStartRecording. Votre application doit commencer l'enregistrement immédiatement. Lorsque le système appelle ce rappel, il peut fournir un URI contenant des informations sur le programme qui va être enregistré. Une fois l'enregistrement terminé, copiez ces données dans la table de données RecordedPrograms.

Enfin, le système appelle RecordingSession.onStopRecording. À ce stade, votre application doit arrêter l'enregistrement immédiatement. Vous devez également créer une entrée dans la RecordedPrograms table qui inclut l'URI des données de la session enregistrée dans la RecordedPrograms.COLUMN_RECORDING_DATA_URI colonne, ainsi que toutes les informations sur le programme fournies par le système lors de l'appel initial à onStartRecording.

Pour en savoir plus sur l'accès à la RecordedPrograms table, consultez la section Gérer les sessions enregistrées.

Gérer les erreurs d'enregistrement

Si une erreur se produit pendant l'enregistrement et que les données enregistrées sont inutilisables, informez-en le système en appelant notifyError. Vous pouvez également appeler notifyError après la création d'une session d'enregistrement pour indiquer au système que votre application ne peut plus enregistrer de sessions.

Si une erreur se produit pendant l'enregistrement, mais que vous souhaitez fournir un enregistrement partiel aux utilisateurs pour la lecture, appelez notifyRecordingStopped pour permettre au système d'utiliser la session partielle.

Gérer les sessions enregistrées

Le système conserve les informations de toutes les sessions enregistrées de toutes les applications de canal compatibles avec l'enregistrement dans la table du fournisseur de contenu RecordedPrograms. Ces informations sont accessibles via les URI d'enregistrement de contenu RecordedPrograms. Utilisez les API du fournisseur de contenu pour lire, ajouter et supprimer des entrées dans cette table.

Pour en savoir plus sur l'utilisation des données du fournisseur de contenu, consultez Principes de base des fournisseurs de contenu.

Bonnes pratiques

Les appareils TV peuvent avoir un espace de stockage limité. Faites donc appel à votre bon sens lorsque vous allouez de l'espace pour enregistrer des sessions. Utilisez RecordingCallback.onError(RECORDING_ERROR_INSUFFICIENT_SPACE) lorsque l'espace disponible est insuffisant pour enregistrer une session.

Lorsque l'utilisateur lance l'enregistrement, commencez à enregistrer les données dès que possible. Pour faciliter cette opération, effectuez toutes les tâches initiales qui prennent du temps, comme l'accès et l'allocation d'espace de stockage, lorsque le système appelle le rappel onCreateRecordingSession. Vous pouvez ainsi commencer l'enregistrement immédiatement lorsque le rappel onStartRecording se déclenche.