Usługi wejścia TV umożliwiają użytkownikowi wstrzymywanie i wznawianie odtwarzania kanału za pomocą interfejsów API do przesuwania w czasie. Android 7.0 rozszerza funkcję przesuwania w czasie, umożliwiając użytkownikowi zapisywanie wielu nagranych sesji.
Użytkownicy mogą z wyprzedzeniem zaplanować nagrywanie lub rozpocząć nagrywanie podczas oglądania programu. Gdy system zapisze nagranie, użytkownik może je przeglądać, zarządzać nim i odtwarzać za pomocą systemowej aplikacji TV.
Jeśli chcesz udostępnić funkcję nagrywania w usłudze wejścia TV, musisz poinformować system, że Twoja aplikacja obsługuje nagrywanie, zaimplementować możliwość nagrywania programów, obsługiwać i zgłaszać wszelkie błędy występujące podczas nagrywania oraz zarządzać nagranymi sesjami.
Wskazywanie obsługi nagrywania
Aby poinformować system, że Twoja usługa wejścia TV obsługuje nagrywanie, ustaw atrybut android:canRecord w pliku XML metadanych usługi na true:
<tv-input xmlns:android="http://schemas.android.com/apk/res/android" android:canRecord="true" android:setupActivity="com.example.sampletvinput.SampleTvInputSetupActivity" />
Więcej informacji o pliku metadanych usługi znajdziesz w artykule Deklarowanie usługi wejścia TV w pliku manifestu.
Możesz też wskazać obsługę nagrywania w kodzie, wykonując te czynności:
- W metodzie
onCreateusługi wejścia TV utwórz nowy obiektTvInputInfoza pomocą klasyTvInputInfo.Builder. - Podczas tworzenia nowego obiektu
TvInputInfowywołaj metodęsetCanRecord(true)przed wywołaniem metodybuild, aby wskazać, że Twoja usługa obsługuje nagrywanie. - Zarejestruj obiekt
TvInputInfow systemie, wywołując metodęTvInputManager.updateTvInputInfo.
Nagrywanie sesji
Gdy usługa wejścia TV zarejestruje, że obsługuje funkcję nagrywania, system wywoła metodę TvInputService.onCreateRecordingSession, gdy będzie potrzebować dostępu do implementacji nagrywania w Twojej aplikacji. Zaimplementuj własną podklasę TvInputService.RecordingSession i zwróć ją, gdy zostanie wywołane wywołanie zwrotne onCreateRecordingSession. Ta podklasa odpowiada za przełączanie się na prawidłowe dane kanału, nagrywanie żądanych danych oraz przekazywanie do systemu informacji o stanie nagrywania i błędach.
Gdy system wywoła metodę RecordingSession.onTune, przekazując identyfikator URI kanału, przełącz się na kanał określony przez ten identyfikator. Poinformuj system, że Twoja aplikacja przełączyła się na wybrany kanał, wywołując metodę notifyTuned. Jeśli Twoja aplikacja nie może przełączyć się na odpowiedni kanał, wywołaj metodę notifyError.
Następnie system wywoła wywołanie zwrotne RecordingSession.onStartRecording. Twoja aplikacja musi natychmiast rozpocząć nagrywanie. Gdy system wywoła to wywołanie zwrotne, może podać identyfikator URI zawierający informacje o programie, który ma zostać nagrany.
Po zakończeniu nagrywania skopiuj te dane do tabeli danych RecordedPrograms.
Na koniec system wywoła metodę RecordingSession.onStopRecording. W tym momencie Twoja aplikacja musi natychmiast zatrzymać nagrywanie. Musisz też utworzyć wpis w tabeli
RecordedPrograms
, który będzie zawierać identyfikator URI danych nagranej sesji w kolumnie
RecordedPrograms.COLUMN_RECORDING_DATA_URI oraz wszelkie informacje o programie
, które system przekazał w początkowym wywołaniu metody
onStartRecording.
Więcej informacji o tym, jak uzyskać dostęp do tabeli
RecordedPrograms,
znajdziesz w sekcji Zarządzanie nagranymi sesjami.
Obsługa błędów nagrywania
Jeśli podczas nagrywania wystąpi błąd, który spowoduje, że nagrane dane będą nieużyteczne, poinformuj o tym system, wywołując metodę notifyError.
Możesz też wywołać metodę notifyError po utworzeniu sesji nagrywania, aby poinformować system, że Twoja aplikacja nie może już nagrywać sesji.
Jeśli podczas nagrywania wystąpi błąd, ale chcesz udostępnić użytkownikom częściowe nagranie do odtworzenia, wywołaj metodę notifyRecordingStopped, aby umożliwić systemowi korzystanie z częściowej sesji.
Zarządzanie nagranymi sesjami
System przechowuje informacje o wszystkich nagranych sesjach ze wszystkich aplikacji kanałów obsługujących nagrywanie w tabeli dostawcy treści RecordedPrograms. Te informacje są dostępne za pomocą identyfikatorów URI nagrywania treści RecordedPrograms. Używaj interfejsów API dostawcy treści, aby odczytywać, dodawać i usuwać wpisy z tej tabeli.
Więcej informacji o pracy z danymi dostawcy treści znajdziesz w artykule Podstawy dostawcy treści.
Sprawdzone metody
Urządzenia TV mogą mieć ograniczoną ilość miejsca na dane, dlatego podczas przydzielania miejsca na zapisywanie nagranych sesji kieruj się zdrowym rozsądkiem. Jeśli nie ma wystarczająco dużo miejsca na zapisanie nagranej sesji, użyj metody RecordingCallback.onError(RECORDING_ERROR_INSUFFICIENT_SPACE).
Gdy użytkownik rozpocznie nagrywanie, zacznij nagrywać dane tak szybko, jak to możliwe. Aby to ułatwić, wykonaj wszystkie czasochłonne zadania wstępne, takie jak uzyskiwanie dostępu do miejsca na dane i przydzielanie go, gdy system wywoła wywołanie zwrotne onCreateRecordingSession. Dzięki temu możesz natychmiast rozpocząć nagrywanie, gdy zostanie wywołane wywołanie zwrotne onStartRecording.