Telewizja na żywo to referencyjna aplikacja telewizyjna przeznaczona do urządzeń telewizyjnych z Androidem. Producenci urządzeń mogą jednak dodać więcej funkcji związanych z konkretnym produktem, których nie obejmuje domyślna implementacja telewizji na żywo, takich jak regulacja obrazu, tryb gry czy tryb 3D. Aby obsługiwać te funkcje lub opcje związane z konkretnym urządzeniem, telewizja na żywo umożliwia te opcje dostosowywania:
- Włączanie trybu przesuwania w czasie, który umożliwia użytkownikom wstrzymywanie, przewijanie do przodu i do tyłu. Konfigurowanie trybu przesunięcia czasowego w celu używania pamięci zewnętrznej zamiast pamięci wewnętrznej.
- Dodawanie opcji do wiersza opcji dotyczących telewizora.
- Dodawanie wiersza niestandardowego i opcji w nim.
Uwaga: Kanały na żywo to implementacja telewizji na żywo przez Google, która może być używana w urządzeniach z usługami Google. Aby dostosować kanały na żywo, w tych instrukcjach zastąp com.android.tv.*
wartością com.google.android.tv.*
.
Dostosowywanie telewizji na żywo
Aby dostosować aplikację Live TV, na urządzeniu docelowym z Androidem TV musi być zainstalowany pakiet dostosowywania, który musi być wstępnie utworzoną aplikacją systemową z uprawnieniamicom.android.tv.permission.CUSTOMIZE_TV_APP
.
Usługa Live TV wyszukuje pakiet systemowy z tymi uprawnieniami, sprawdza pliki zasobów i wykrywa czynności pakietu oznaczone określonymi kategoriami w celu przetworzenia.
Najważniejsza uwaga: tylko jeden pakiet może dostosowywać telewizję na żywo.
Konfigurowanie trybu przesunięcia czasowego
Przewijanie w czasie (odtwarzanie z opóźnieniem) umożliwia urządzeniom z Androidem TV wstrzymywanie, przewijanie do tyłu i do przodu odtwarzania kanału. W przypadku aplikacji Live TV przesuwanie w czasie jest możliwe za pomocą elementów sterujących odtwarzaniem. Przewijanie w czasie jest domyślnie włączone w przypadku telewizji na żywo, ale można je wyłączyć. Przesyłanie w czasie można też skonfigurować tak, aby używać tylko pamięci zewnętrznej.
Aby skonfigurować przesunięcie czasowe, dodaj zasób ciągu znaków trickplay_mode
i ustaw jego wartość na jedną z tych opcji:
enabled
: włączanie przesuwania w czasie. Jest to wartość domyślna, gdy nie podano żadnych opcji.disabled
: wyłączanie przesuwania w czasie.use_external_storage_only
: skonfiguruj przesuwanie czasowe, aby korzystać z zewnętrznego miejsca na dane.
<string name="trickplay_mode">use_external_storage_only</string>

Rysunek 1 Po naciśnięciu środkowego przycisku pada włącza się interfejs elementów sterujących odtwarzaniem.
Dostosowywanie opcji telewizora
Producenci urządzeń mogą dodawać niestandardowe opcje ustawień telewizji na żywo do dotychczasowego menu opcji telewizji, na przykład dodawać skrót do ustawień Sound Picture.
Aby wskazać opcję niestandardową, zadeklaruj filtr intencji, który odfiltrowuje kategorię com.android.tv.category.OPTIONS_ROW
w aktywności. Funkcja niestandardowa jest implementowana przez producenta urządzenia w ramach aktywności. Po kliknięciu tej opcji rozpocznie się aktywność. W przypadku tej opcji używane są tytuł i ikona aktywności. Aby zapewnić użytkownikom jak najlepsze wrażenia, należy dostosować opcje telewizyjne do istniejącego interfejsu.
Uwaga: aktywność może obsługiwać tylko jedną opcję, ponieważ telewizja na żywo nie może rozróżniać filtrów intencji w aktywności w tej samej kategorii z powodu ograniczeń Androida. Aby dowiedzieć się, jak obejść ten problem, przeczytaj artykuł Praca z większą liczbą opcji w działalności.
Producenci urządzeń mogą też umieścić opcję niestandardową przed istniejącymi opcjami lub po nich, definiując android:priority
w AndroidManifest.xml
.
Opcja z zdefiniowaną wartością priorytetu niższą niż 100 jest wyświetlana przed istniejącymi elementami, a opcja z wartością wyższą niż 100 – po nich. Wiele opcji niestandardowych (przed lub za istniejącymi opcjami) jest sortowanych według priorytetu w kolejności rosnącej. Jeśli opcje mają ten sam priorytet, ich kolejność jest niezdefiniowana.
W tym przykładzie opcja pojawia się jako pierwsza w wierszu opcji telewizora, a po jej kliknięciu uruchamia się PictureSettingsActivity.
<activity android:name=".PictureSettingsActivity" android:label="@string/activity_label_picture_settings" android:theme="@style/Theme.Panel"> <intent-filter android:icon="@drawable/ic_tvoptions_brightness" android:label="@string/option_label_brightness" android:priority="0"> <action android:name="android.intent.action.MAIN" /> <category android:name="com.android.tv.category.OPTIONS_ROW" /> </intent-filter> </activity>
Rysunek 2. Przykładowy wiersz z opcjami dostosowanymi do telewizora (jasność i oszczędzanie energii).
Rysunek 3. Przykładowe opcje telewizora
Obsługa wielu opcji w działaniu
Opcja jest mapowana na filtr intencji aktywności i odwrotnie. Ponieważ Android nie rozróżnia filtrów intencji o tych samych kategoriach i tych samych działaniach, aktywność obsługuje tylko jedną opcję, nawet jeśli w jej definicji zadeklarowano kilka filtrów intencji. Aby obsłużyć wiele opcji w działalności, użyj <activity-alias>
w pozycji AndroidManifest.xml
. W aktywności użyj getIntent().getComponent()
, aby wskazać klikniętą opcję.
<activity-alias android:name=".AnyUniqueName" android:targetActivity=".PictureSettingsActivity"> <intent-filter android:icon="@drawable/ic_tvoptions_energy_saving" android:label="@string/option_label_energy_saving" android:priority="1"> <action android:name="android.intent.action.MAIN" /> <category android:name="com.android.tv.category.OPTIONS_ROW" /> </intent-filter> </activity-alias>
Tworzenie wiersza niestandardowego
Producenci urządzeń mogą dodawać i dostosowywać wiersz nad wierszem opcji telewizora. Ten wiersz niestandardowy jest opcjonalny.
Tytuł wiersza
W pliku res/values/strings.xml
zdefiniuj ciąg znaków partner_row_title
. Wartość ciągu jest używana do tytułu wiersza niestandardowego.
<string name="partner_row_title">Partner Row</string>
Opcje niestandardowe
Aby dodać opcje niestandardowe do wiersza niestandardowego, postępuj zgodnie z procedurą dodawania opcji do menu opcji telewizyjnych, ale zamiast nazwy kategorii wpisz com.android.tv.category.PARTNER_ROW
.
<activity android:name=".ThreeDimensionalSettingDialogActivity" android:label="@string/activity_label_3d" android:theme="@android:style/Theme.Material.Light.Dialog"> <intent-filter android:icon="@drawable/ic_tvoptions_3d" android:priority="0"> <action android:name="android.intent.action.MAIN" /> <category android:name="com.android.tv.category.PARTNER_ROW" /> </intent-filter> </activity>
Rysunek 4 Przykład opcjonalnego wiersza niestandardowego.
Rysunek 5. Przykład okna opcji niestandardowej