Mit TV-Eingabediensten können Nutzer die Wiedergabe von Sendern mit Time-Shifting-APIs pausieren und fortsetzen. In Android 7.0 wurde die Time-Shifting-Funktion erweitert, sodass Nutzer mehrere aufgezeichnete Sitzungen speichern können.
Nutzer können Aufzeichnungen im Voraus planen oder eine Aufzeichnung starten, während sie sich eine Sendung ansehen. Sobald das System eine Aufzeichnung gespeichert hat, können Nutzer sie mit der TV-App des Systems durchsuchen, verwalten und wiedergeben.
Wenn Sie eine Aufzeichnungsfunktion für Ihren TV-Eingabedienst anbieten möchten, müssen Sie dem System mitteilen, dass Ihre App Aufzeichnungen unterstützt, die Möglichkeit zum Aufzeichnen von Sendungen implementieren, alle Fehler verarbeiten und kommunizieren, die während der Aufzeichnung auftreten, und Ihre aufgezeichneten Sitzungen verwalten.
Unterstützung für Aufzeichnungen angeben
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 Metadaten Ihres Dienstes 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 Datei mit den Metadaten des Dienstes finden Sie unter TV-Eingabedienst im Manifest deklarieren.
Alternativ können Sie die Unterstützung für Aufzeichnungen in Ihrem Code mit den folgenden Schritten angeben:
- Erstellen Sie in der Methode
onCreateIhres TV-Eingabedienstes ein neuesTvInputInfoObjekt mit derTvInputInfo.BuilderKlasse. - Rufen Sie beim Erstellen des neuen
TvInputInfo-ObjektssetCanRecord(true)auf, bevor Siebuildaufrufen, um anzugeben, dass Ihr Dienst Aufzeichnungen unterstützt. - Registrieren Sie Ihr
TvInputInfo-Objekt beim System, indem SieTvInputManager.updateTvInputInfoaufrufen.
Sitzung aufzeichnen
Nachdem Ihr TV-Eingabedienst registriert hat, dass er die Aufzeichnungsfunktion unterstützt, ruft das System die Methode TvInputService.onCreateRecordingSession Ihrer App auf, wenn es auf die Aufzeichnungsimplementierung Ihrer App zugreifen muss. Implementieren Sie Ihre eigene Unterklasse TvInputService.RecordingSession und geben Sie sie zurück, wenn der Callback onCreateRecordingSession ausgelöst wird. Diese Unterklasse ist dafür verantwortlich, zu den richtigen Kanaldaten zu wechseln, die angeforderten Daten aufzuzeichnen und den Aufzeichnungsstatus und Fehler an das System zu senden.
Wenn das System RecordingSession.onTune aufruft und einen Kanal-URI übergibt, wechseln Sie zu dem Kanal, der im URI angegeben ist. Teilen Sie dem System mit, dass Ihre App zum ausgewählten Kanal gewechselt hat, indem Sie notifyTuned aufrufen. Wenn Ihre App nicht zum richtigen Kanal wechseln kann, rufen Sie notifyError auf.
Das System ruft dann den Callback RecordingSession.onStartRecording auf. Ihre App muss sofort mit der Aufzeichnung beginnen. Wenn das System diesen Callback aufruft, kann es einen URI bereitstellen, der Informationen zur Sendung enthält, die aufgezeichnet werden soll.
Kopieren Sie diese Daten nach Abschluss der Aufzeichnung in die Datentabelle RecordedPrograms.
Schließlich ruft das System RecordingSession.onStopRecording auf. An diesem Punkt muss Ihre App die Aufzeichnung sofort beenden. Sie müssen auch einen Eintrag in der
RecordedPrograms
Tabelle erstellen, der den URI der aufgezeichneten Sitzungsdaten in der
RecordedPrograms.COLUMN_RECORDING_DATA_URI Spalte und alle Programminformationen enthält, die das System beim ersten Aufruf von
onStartRecording bereitgestellt hat.
Weitere Informationen zum Zugriff auf die
RecordedPrograms Tabelle,
finden Sie im Abschnitt Aufgezeichnete Sitzungen verwalten.
Aufzeichnungsfehler verarbeiten
Wenn während der Aufzeichnung ein Fehler auftritt, der zu unbrauchbaren aufgezeichneten Daten führt, benachrichtigen Sie das System, indem Sie notifyError aufrufen.
Sie können notifyError auch aufrufen, nachdem eine Aufzeichnungssitzung erstellt wurde, um dem System mitzuteilen, dass Ihre App keine Sitzungen mehr aufzeichnen kann.
Wenn während der Aufzeichnung ein Fehler auftritt, Sie aber eine teilweise Aufzeichnung zur Wiedergabe für Nutzer bereitstellen möchten, rufen Sie notifyRecordingStopped auf, damit das System die teilweise Sitzung verwenden kann.
Aufgezeichnete Sitzungen verwalten
Das System verwaltet Informationen zu allen aufgezeichneten Sitzungen aus allen aufzeichnungsfähigen Kanal-Apps in der Content-Provider-Tabelle RecordedPrograms. Diese Informationen sind über die Content-Aufzeichnungs-URIs von RecordedPrograms zugänglich. Verwenden Sie Content-Provider-APIs, um Einträge aus dieser Tabelle zu lesen, hinzuzufügen und zu löschen.
Weitere Informationen zum Arbeiten mit Content-Provider-Daten finden Sie unter Grundlagen zu Content-Providern.
Best Practices
TV-Geräte haben möglicherweise nur begrenzten Speicherplatz. Gehen Sie daher sorgfältig vor, wenn Sie Speicherplatz zum Speichern aufgezeichneter 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 die Aufzeichnung startet, beginnen Sie so schnell wie möglich mit der Aufzeichnung von Daten. Führen Sie dazu alle zeitaufwendigen Aufgaben im Voraus aus, z. B. den Zugriff auf und die Zuweisung von Speicherplatz, wenn das System den Callback onCreateRecordingSession aufruft. So können Sie sofort mit der Aufzeichnung beginnen, wenn der Callback onStartRecording ausgelöst wird.