Zarządzanie kontrolerami TV

Do interakcji z aplikacjami telewizory wymagają dodatkowego urządzenia – podstawowego kontrolera zdalnego lub kontrolera do gier. Dlatego aplikacja musi obsługiwać wprowadzanie danych na padzie kierunkowym. Aplikacja może też obsługiwać kontrolery, które są offline i wprowadzają sygnały z kilku typów kontrolerów.

W tym przewodniku omawiamy wymagania dotyczące obsługi kontrolerów urządzeń telewizyjnych.

Minimalne elementy sterujące pada kierunkowego

Domyślnym kontrolerem telewizora jest pad kierunkowy. Ogólnie aplikacja musi być obsługiwana za pomocą kontrolera zdalnego, który ma tylko przyciski w górę, w dół, w lewo, w prawo, zaznaczanie, Wstecz i Ekran główny. Jeśli Twoja aplikacja to gra, która zwykle wymaga kontrolera z dodatkowymi elementami sterującymi, spróbuj obsługiwać rozgrywkę wyłącznie za pomocą tych elementów sterujących. W przeciwnym razie poinformuj użytkownika, że jest wymagany kontroler, i zezwól mu na bezpieczne wyjście z gry za pomocą pada kierunkowego.

Więcej informacji o obsłudze nawigacji za pomocą kontrolera pada kierunkowego na urządzeniach telewizyjnych znajdziesz w artykule o nawigacji po telewizorze.

Obsługa rozłączenia kontrolera

Kontrolery do telewizora to często urządzenia Bluetooth, które mogą próbować oszczędzać energię przez okresowe przechodzenie w tryb uśpienia i odłączanie od telewizora. Oznacza to, że aplikacja może zostać przerwana lub ponownie uruchomiona, jeśli nie została skonfigurowana do obsługi tych zdarzeń ponownego połączenia. Mogą one mieć miejsce w następujących okolicznościach:

  • Podczas odtwarzania kilkuminutowego filmu pad kierunkowy lub kontroler do gier może przejść w tryb uśpienia, rozłączyć się z telewizorem i później połączyć się ponownie.
  • Podczas rozgrywki nowy gracz może dołączyć do gry za pomocą kontrolera, który nie jest jeszcze połączony.
  • Podczas rozgrywki gracz może wyjść z gry i odłączyć kontroler.

Każda aktywność w aplikacji TV, która podlega zdarzeniu rozłączenia i ponownego połączenia, musi być skonfigurowana pod kątem obsługi zdarzeń ponownego połączenia w manifeście aplikacji. Poniższy przykładowy kod pokazuje, jak włączyć działanie w celu obsługi zmian konfiguracji, takich jak podłączanie, rozłączanie i ponowne łączenie za pomocą klawiatury lub urządzenia nawigacyjnego:

<activity
  android:name="com.example.android.TvActivity"
  android:label="@string/app_name"
  android:configChanges="keyboard|keyboardHidden|navigation"
  android:theme="@style/Theme.Leanback">

  <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LEANBACK_LAUNCHER" />
  </intent-filter>
  ...
</activity>

Ta zmiana konfiguracji umożliwia aplikacji kontynuowanie działania w wyniku zdarzenia ponownego połączenia, a nie przez ponowne uruchomienie przez platformę Androida, co nie jest wygodne dla użytkowników.

Obsługa różnych wariantów metody wprowadzania na padzie kierunkowym

Użytkownicy telewizorów mogą mieć więcej niż jeden typ kontrolera, z którym korzystają. Na przykład użytkownik może mieć zarówno podstawowy pad kierunkowy, jak i kontroler do gier. Kody klawiszy dostarczane przez kontroler do gier, gdy jest on używany do obsługi funkcji pada kierunkowego, mogą różnić się od kodów klawiszy wysyłanych przez podstawowy pad kierunkowy.

Obsługuj różne rodzaje danych wejściowych pada kierunkowego, aby użytkownik nie musiał przełączać kontrolerów do obsługi aplikacji. Więcej informacji o obsłudze wariantów danych wejściowych znajdziesz w sekcji Przetwarzanie danych wejściowych pada kierunkowego.

Obsługa zdarzeń przycisku

Gdy użytkownik kliknie przycisk na kontrolerze, aplikacja otrzyma zdarzenie z komponentem KeyEvent. Celem tego przycisku może być zdarzenie związane z multimediami (odtworzenie, wstrzymanie lub zatrzymanie) lub zdarzenie typu TV, np. wybór lub nawigacja. Aby zadbać o wygodę użytkowników, przypisuj do nich spójne działanie przycisków kontrolera.

Zdarzenia interfejsu TV

Przypisz zachowanie interfejsu TV do przycisków generujących typy KeyEvent, jak w tej tabeli:

KeyEventDziałanie
KEYCODE_BUTTON_B, KEYCODE_BACKWstecz
KEYCODE_BUTTON_SELECT, KEYCODE_BUTTON_A, KEYCODE_ENTER, KEYCODE_DPAD_CENTER, KEYCODE_NUMPAD_ENTERZaznaczenie
KEYCODE_DPAD_UP, KEYCODE_DPAD_DOWN, KEYCODE_DPAD_LEFT, KEYCODE_DPAD_RIGHTNawigacja

Zdarzenia multimedialne

Gdy użytkownik ogląda multimedia, przypisz działanie do przycisków generujących typy KeyEvent, jak pokazano w tabeli poniżej. Jeśli Twoja aplikacja kontroluje MediaSession, użyj metody MediaControllerAdapter, aby wywołać jedną z metod MediaControllerCompat.TransportControls widocznych w tabeli. W tym kontekście przyciski wyboru działają jak przyciski Odtwórz lub Wstrzymaj.

KeyEventWywołanie TransportControlsDziałanie
BUTTON_SELECT, BUTTON_A, ENTER, DPAD_CENTER, KEYCODE_NUMPAD_ENTER play()Odtwórz
BUTTON_START, BUTTON_SELECT, BUTTON_A, ENTER, DPAD_CENTER, KEYCODE_NUMPAD_ENTER pause()Wstrzymaj
BUTTON_R1skipToNext()Dalej
BUTTON_L1skipToPrevious()Wstecz
DPAD_RIGHT, BUTTON_R2, AXIS_RTRIGGER, AXIS_THROTTLEfastForward()Przewijanie filmu
DPAD_LEFT, BUTTON_L2, AXIS_LTRIGGER, AXIS_BRAKErewind()Przewiń do tyłu
Nie dotyczystop()Zatrzymaj

Uwaga: gdy używasz właściwości MediaSession, nie zastępuj obsługi przycisków związanych z multimediami, takich jak KEYCODE_MEDIA_PLAY czy KEYCODE_MEDIA_PAUSE. System automatycznie aktywuje odpowiednią metodę MediaSession.Callback.

Zadbaj o odpowiednie działanie przycisku Wstecz

Przycisk Wstecz nie może nigdy być przełącznikiem. Na przykład nie powinny służyć do otwierania i zamykania menu. Służy on wyłącznie do przechodzenia wstecz (styl menu nawigacyjnego) po poprzednich ekranach, na których był włączony odtwarzacz.

Ponieważ przycisk Wstecz obsługuje tylko liniową nawigację wsteczną, za jego pomocą możesz pozostawić menu aplikacji otwarte innym przyciskiem i wrócić do aplikacji. Regularne naciskanie przycisku Wstecz musi ostatecznie prowadzić do ekranu głównego Androida TV. Przykład: rozgrywka > ekran wstrzymania gry > ekran główny gry > ekran główny Androida TV lub odtworzenie programu telewizyjnego > ekran główny aplikacji TV > ekran główny Androida TV.

Więcej informacji o projektowaniu na potrzeby nawigacji znajdziesz w artykule Projektowanie nawigacji wstecz i wstecz. Więcej informacji o implementacji znajdziesz w artykule o prawidłowym korzystaniu z nawigacji powrotnej.

Obsługa kontrolerów do gier

Obsługa elementów sterujących pada kierunkowego

Zaplanuj schemat sterowania na podstawie kontrolera z pada kierunkowego, ponieważ jest to domyślny zestaw na urządzeniach z Androidem TV. Gracz musi mieć możliwość korzystania z pada kierunkowego do wszystkich aspektów gry, a nie tylko do sterowania główną rozgrywką, ale także po menu i reklamach. Dlatego dopilnuj, aby gra na Androida TV nie korzystała z interfejsu dotykowego z językiem takim jak „Kliknij tutaj, aby kontynuować”.

Sposób, w jaki kształtujesz interakcję gracza z kontrolerem, może być kluczem do zapewnienia użytkownikom lepszych wrażeń. Weź pod uwagę te sprawdzone metody:

  • Z góry poinformuj graczy o wymaganiach dotyczących kontrolerów: użyj opisu z Google Play, aby poinformować gracza o swoich oczekiwaniach dotyczących kontrolerów. Jeśli gra lepiej sprawdzi się w przypadku pada do gier z joystickiem niż z tylko D-padem, niech będzie to jasno określone. Gracz, który używa nieodpowiedniego kontrolera w grze, może mieć złe wrażenia i sprawić, że Twoja gra będzie źle oceniona.
  • Używaj spójnego mapowania przycisków: intuicyjne mapowanie przycisków ma kluczowe znaczenie dla wygody użytkowników. Przestrzegaj akceptowanych zwyczajów – kliknij przycisk A, aby zaakceptować, i przycisk B, aby anulować. Możesz też zaoferować elastyczność w formie możliwości powielania. Więcej informacji o mapowaniu przycisków znajdziesz w sekcji Obsługa działań kontrolera.
  • Wykrywanie możliwości kontrolera i odpowiednie dostosowywanie: zapytaj kontroler o jego możliwości, aby zoptymalizować dopasowanie kontrolera do gry. Na przykład gracz może sterować obiektem, machając kontrolerem w powietrzu, ale jeśli kontroler gracza nie ma akcelerometru ani żyroskopu, machanie nie zadziała. Wyślij zapytanie do kontrolera, a jeśli wykrywanie ruchu nie jest obsługiwane, przełącz się na alternatywny, dostępny schemat sterowania. Więcej informacji o możliwościach kontrolera zapytań znajdziesz w artykule Obsługa kontrolerów w różnych wersjach Androida.

Używanie odpowiednich przycisków

Nie wszystkie kontrolery do gier mają przyciski Start, Szukaj i Menu. Zadbaj o to, aby interfejs użytkownika nie zależył od użycia tych przycisków.

Obsługa wielu kontrolerów

Gdy w grę gra kilku graczy, a każdy z nich ma własny kontroler, ważne jest zmapowanie każdej pary kontroler-gracz. Informacje o implementowaniu identyfikacji numerów kontrolerów znajdziesz w sekcji getControllerNumber().

Obsługa rozłączenia kontrolera

Gdy kontroler jest odłączony w trakcie rozgrywki, wstrzymaj grę i wyświetl okno z prośbą o ponowne połączenie kontrolera.

W oknie dialogowym podaj też wskazówki dotyczące rozwiązywania problemów. Na przykład powiedz odtwarzaczowi „Sprawdź połączenie Bluetooth”. Więcej informacji o wdrażaniu obsługi urządzeń wejściowych znajdziesz w artykułach Obsługa działań kontrolera i omówienie Bluetootha.

Pokaż instrukcje kontrolera

Jeśli gra zawiera instrukcje wizualnego sterowania grą, użyj obrazu kontrolera bez oznaczeń marki i dołącz tylko przyciski zgodne z Androidem.

Aby zobaczyć przykładowe obrazy kontrolera zgodnego z Androidem, pobierz szablon Android TV Gamepad (ZIP). Zawiera biały kontroler na czarnym tle oraz czarny kontroler na białym tle (jak pokazano na 1.) w postaci plików PNG i Adobe® Illustrator®.

Rysunek 1. Przykładowe instrukcje kontrolera za pomocą szablonu pada do gier Android TV.