Aufzeichnung von Inhalten unterstützen

Mit TV-Eingabediensten kann der Nutzer die Kanalwiedergabe mit zeitversetzten APIs pausieren und fortsetzen. Mit Android 7.0 wird die zeitversetzte Nutzung erweitert, damit Nutzer mehrere aufgezeichnete Sitzungen speichern können.

Nutzer können Aufnahmen im Voraus planen oder eine Aufzeichnung starten, während sie sich eine Sendung ansehen. Sobald das System eine Aufnahme gespeichert hat, kann der Nutzer sie über die System-TV-App durchsuchen, verwalten und wiedergeben.

Wenn du Aufnahmefunktionen für deinen TV-Eingabedienst bereitstellen möchtest, musst du dem System mitteilen, dass deine App Aufzeichnungen unterstützt, die Möglichkeit zur Aufnahme von Sendungen implementieren, während der Aufzeichnung auftretende Fehler verarbeiten und kommunizieren sowie deine aufgezeichneten Sitzungen verwalten.

Auf Unterstützung für die Aufzeichnung hinweisen

Wenn Sie dem System mitteilen möchten, dass Ihr TV-Eingabedienst Aufzeichnungen unterstützt, legen Sie das Attribut android:canRecord in der XML-Datei mit den Dienstmetadaten auf true fest:

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

Weitere Informationen zur Dienstmetadatendatei findest du unter TV-Eingabedienst im Manifest deklarieren.

Alternativ können Sie die Aufzeichnungsunterstützung in Ihrem Code angeben. Gehen Sie dazu so vor:

  1. Erstellen Sie in der onCreate()-Methode des TV-Eingabedienstes ein neues TvInputInfo-Objekt mit der Klasse TvInputInfo.Builder.
  2. Rufen Sie beim Erstellen des neuen TvInputInfo-Objekts zuerst setCanRecord(true) und dann build() auf. So geben Sie an, dass Ihr Dienst Aufzeichnungen unterstützt.
  3. Registrieren Sie das TvInputInfo-Objekt beim System, indem Sie TvInputManager.updateTvInputInfo() aufrufen.

Sitzung aufzeichnen

Nachdem Ihr TV-Eingabedienst registriert hat, dass er die Aufzeichnungsfunktion unterstützt, ruft das System die Methode TvInputService.onCreateRecordingSession() auf, wenn es auf die Aufzeichnungsimplementierung Ihrer App zugreifen muss. Implementieren Sie Ihre eigene abgeleitete TvInputService.RecordingSession-Klasse und geben Sie sie zurück, wenn der onCreateRecordingSession()-Callback ausgelöst wird. Diese Unterklasse ist für den Wechsel zu den richtigen Kanaldaten, die Aufzeichnung der angeforderten Daten und die Kommunikation des Aufzeichnungsstatus und der -fehler an das System verantwortlich.

Wenn das System RecordingSession.onTune() aufruft und einen Kanal-URI übergeben muss, wählen Sie den Kanal aus, der im URI angegeben ist. Teile dem System mit, dass deine App den gewünschten Kanal eingestellt hat, indem du notifyTuned() aufrufst. Wenn deine App nicht den richtigen Kanal einstellen kann, rufe notifyError() auf.

Das System ruft als Nächstes den Callback RecordingSession.onStartRecording() auf. Ihre App muss sofort mit der Aufzeichnung beginnen. Wenn das System diesen Callback aufruft, wird unter Umständen ein URI mit Informationen zu dem Programm angegeben, das aufgezeichnet werden soll. Wenn die Aufzeichnung abgeschlossen ist, kopieren Sie diese Daten in die Datentabelle RecordedPrograms.

Schließlich ruft das System RecordingSession.onStopRecording() auf. An dieser Stelle muss die Aufzeichnung sofort beendet werden. Sie müssen außerdem einen Eintrag in der Tabelle RecordedPrograms erstellen, der den URI der aufgezeichneten Sitzungsdaten in der Spalte RecordedPrograms.COLUMN_RECORDING_DATA_URI und alle Programminformationen enthält, die das System beim ersten Aufruf von onStartRecording() bereitgestellt hat.

Weitere Informationen zum Zugriff auf die Tabelle RecordedPrograms finden Sie im Abschnitt Aufgezeichnete Sitzungen verwalten.

Aufzeichnende Fehler beheben

Wenn während der Aufzeichnung ein Fehler auftritt, der zu unbrauchbaren aufgezeichneten Daten führt, benachrichtigen Sie das System durch Aufrufen von notifyError(). Sie können notifyError() auch nach dem Erstellen einer Aufzeichnungssitzung aufrufen, um dem System mitzuteilen, dass Ihre App keine Sitzungen mehr aufzeichnen kann.

Wenn während der Aufzeichnung ein Fehler auftritt, Sie Nutzern aber eine teilweise Aufzeichnung zur Wiedergabe zur Verfügung stellen möchten, rufen Sie notifyRecordingStopped() auf, damit das System die Teilsitzung verwenden kann.

Aufgezeichnete Sitzungen verwalten

Das System speichert Informationen für alle aufgezeichneten Sitzungen von allen aufzeichnungsfähigen Kanal-Apps in der Tabelle des Contentanbieters RecordedPrograms. Auf diese Informationen kann über die RecordedPrograms-URIs für die Inhaltsaufzeichnung zugegriffen werden. Mit Content Provider APIs können Sie Einträge aus dieser Tabelle lesen, hinzufügen und löschen.

Weitere Informationen zum Arbeiten mit Contentanbieterdaten finden Sie unter Contentanbieter – Grundlagen.

Best Practices

TV-Geräte haben möglicherweise nur begrenzten Speicherplatz. Überlegen Sie es sich also gut, wie Sie Speicher für aufgezeichnete Sitzungen zuweisen. Verwenden Sie RecordingCallback.onError(RECORDING_ERROR_INSUFFICIENT_SPACE), wenn nicht genügend Speicherplatz zum Speichern einer aufgezeichneten Sitzung vorhanden ist.

Wenn der Nutzer mit der Aufzeichnung beginnt, beginnen Sie so bald wie möglich mit der Aufzeichnung der Daten. Zu diesem Zweck müssen Sie vorab alle zeitaufwendigen Aufgaben wie den Zugriff auf und die Zuweisung von Speicherplatz erledigen, wenn das System den onCreateRecordingSession()-Callback aufruft. So können Sie die Aufzeichnung sofort starten, wenn der onStartRecording()-Callback ausgelöst wird.