Zarządzanie kontrolerami TV

Do interakcji z aplikacjami telewizory wymagają dodatkowego urządzenia – podstawowego pilota lub kontrolera gier. Aplikacja musi więc obsługiwać wprowadzanie na padzie kierunkowym. Aplikacja może też wymagać obsługi kontrolerów przechodzących w tryb offline i pochodzących z więcej niż 1 typu kontrolera.

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

Minimalne elementy sterujące na padzie kierunkowym

Domyślnym kontrolerem telewizora jest pad kierunkowy. Aplikację można obsługiwać za pomocą pilota, który ma tylko przyciski góra, dół, lewa, prawa, wyboru, Wstecz i przycisk ekranu głównego. Jeśli Twoja aplikacja jest grą, która zwykle wymaga kontrolera do gier z dodatkowymi elementami sterującymi, spróbuj obsługiwać rozgrywkę wyłącznie za pomocą tych przycisków na padzie kierunkowym. W przeciwnym razie poinformuj użytkownika, że jest wymagany kontroler, i pozwól mu płynnie zamknąć grę za pomocą kontrolera pada kierunkowego.

Więcej informacji o nawigacji za pomocą kontrolerów padów kierunkowych w przypadku urządzeń telewizyjnych znajdziesz w artykule o nawigacji na telewizorze.

Kontroler się rozłącza

Kontrolery do telewizora to często urządzenia Bluetooth, które mogą próbować oszczędzać energię, okresowo przechodząc w tryb uśpienia i odłączając się od telewizora. Oznacza to, że aplikacja może zostać przerwana lub uruchomiona ponownie, jeśli nie jest skonfigurowana do obsługi zdarzeń ponownego połączenia. Może się tak zdarzyć, gdy:

  • Podczas odtwarzania filmu, który trwa kilka minut, pad kierunkowy lub kontroler do gier może przejść w tryb uśpienia, odłączyć się od telewizora i połączyć ponownie później.
  • W trakcie rozgrywki nowy gracz może dołączyć do gry za pomocą kontrolera, który nie jest jeszcze połączony.
  • W trakcie rozgrywki gracz może opuścić grę i odłączyć kontroler.

Każda aktywność w aplikacji na telewizory, która wymaga zdarzeń rozłączenia i ponownego połączenia, musi być skonfigurowana pod kątem obsługi zdarzeń ponownego połączenia w pliku manifestu aplikacji. Poniższy przykładowy kod pokazuje, jak włączyć działanie do obsługi zmian konfiguracji, w tym podłączenia, rozłączania i ponownego podłączenia 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 dalsze działanie w ramach zdarzenia ponownego połączenia, a nie przez platformę Androida, co nie jest wygodne dla użytkowników.

Obsługa odmian danych wejściowych na padzie kierunkowym

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

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

Obsługuj zdarzenia przycisku

Gdy użytkownik kliknie przycisk na kontrolerze, aplikacja otrzyma zdarzenie z KeyEvent. Działaniem przycisku może być zdarzenie multimedialne, takie jak odtworzenie, wstrzymanie lub zatrzymanie. Może też to być zdarzenie typu telewizyjnego, np. wybór czy nawigacja. Aby zadbać o wygodę użytkowników, przypisz spójne działanie przyciskom kontrolera.

Zdarzenia dotyczące interfejsu telewizora

Przypisz zachowanie interfejsu telewizora do przycisków, które generują typy KeyEvent, jak pokazano 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 zachowanie przycisków, które generują typy KeyEvent, zgodnie z tabelą poniżej. Jeśli Twoja aplikacja kontroluje MediaSession, użyj MediaControllerAdapter, aby wywołać jedną z metod MediaControllerCompat.TransportControls podanych w tabeli. Pamiętaj, że w tym przypadku przyciski wyboru działają jak przyciski Odtwórz i Wstrzymaj.

KeyEventRozmowa TransportControlsDziałanie
BUTTON_SELECT, BUTTON_A, ENTER, DPAD_CENTER, KEYCODE_NUMPAD_ENTER play()Odtwarzaj
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: jeśli używasz 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.

Zapewnianie prawidłowego działania przycisku Wstecz

Przycisk Wstecz nie może działać jako przełącznik. Nie używaj go na przykład do otwierania i zamykania menu. Służy on jedynie do przechodzenia wstecz (w stylu menu nawigacyjnego) do poprzednich ekranów, w których działał odtwarzacz.

Ponieważ przycisk Wstecz działa tylko w trybie liniowym, możesz użyć go, aby pozostawić menu w aplikacji otwarte innym przyciskiem i wrócić do aplikacji. Kolejne naciśnięcie przycisku Wstecz musi zawsze prowadzić do ekranu głównego Androida TV. Na przykład: rozgrywka > ekran wstrzymania gry > ekran główny gry > ekran główny Androida TV lub odtwarzanie serialu > ekran główny aplikacji TV > ekran główny Androida TV.

Więcej informacji o projektowaniu nawigacji znajdziesz w artykule o projektowaniu nawigacji związanej z kopiami zapasowymi i wcześniejszymi. Więcej o implementacji znajdziesz w artykule Zapewnianie prawidłowej nawigacji wstecz.

Obsługa kontrolerów do gier

Obsługa sterowania za pomocą pada kierunkowego

Zaplanuj schemat sterowania na padach kierunkowych, ponieważ jest to domyślny zestaw sterowania na urządzeniach z Androidem TV. Gracz musi mieć możliwość korzystania z pada kierunkowego do wszystkich aspektów gry – nie tylko sterowania główną rozgrywką, ale też poruszaniem się po menu i reklamach. Dlatego upewnij się, że Twoja gra na Androida TV nie obsługuje interfejsu dotykowego z komunikatem takim jak „Kliknij tutaj, by kontynuować”.

Sposób, w jaki kształtujesz interakcję gracza z kontrolerem, może mieć kluczowe znaczenie dla zapewnienia wygody użytkownikom. Nie zapomnij o tych sprawdzonych metodach:

  • Określ z góry wymagania dotyczące kontrolera: użyj opisu w Google Play, aby poinformować gracza o wszelkich oczekiwaniach dotyczących kontrolerów. Powiedz to jasno, jeśli gra lepiej nadaje się do gamepada z joystickiem niż z padem kierunkowym. Gracz, który używa niewłaściwego kontrolera w grze, może mieć złe wrażenia i wystawić grą słabą ocenę.
  • Zachowaj spójne mapowanie przycisków: intuicyjne mapowanie przycisków jest kluczem do zapewnienia użytkownikom wygody użytkowania. Możesz na przykład przestrzegać akceptowanych zwyczajów, klikając przycisk A do zaakceptowania lub przycisk B do anulowania. Możesz też zaoferować elastyczność w formie możliwości ponownego przypisania. Więcej informacji o mapowaniu przycisków znajdziesz w sekcji Obsługiwanie działań kontrolera.
  • Wykrywanie możliwości kontrolera i odpowiednie dostosowywanie: wyślij do kontrolera zapytanie o jego możliwości, aby zoptymalizować dopasowanie między kontrolerem a grą. Na przykład możesz chcieć, by gracz sterował obiektem, machając kontrolerem w powietrzu. Jeśli jednak kontroler nie ma akcelerometru ani żyroskopu, machanie nie dział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 funkcjach 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 uruchamiania, wyszukiwania i menu. Upewnij się, że interfejs użytkownika nie zależy od użycia tych przycisków.

Obsługa kilku kontrolerów

Gdy w grę gra wielu graczy, każdy z nich ma własny kontroler, ważne jest, by zmapować każdą parę kontroler-kontroler. Informacje o implementowaniu identyfikatora numeru kontrolera znajdziesz w sekcji getControllerNumber().

Kontroler się rozłącza

Jeśli kontroler zostanie odłączony w trakcie gry, wstrzymaj grę i wyświetl okno z prośbą o ponowne połączenie kontrolera z odłączonym graczem.

Podaj też w oknie wskazówki dotyczące rozwiązywania problemów. Powiedz na przykład „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ówieniem Bluetootha.

Pokaż instrukcje kontrolera

Jeśli Twoja gra zawiera instrukcje sterowania grą, użyj zdjęcia kontrolera bez oznaczeń marki i uwzględnij tylko przyciski zgodne z Androidem.

Przykładowe zdjęcia kontrolera zgodnego z Androidem znajdziesz w pliku Android TV Gamepad Template (ZIP). Zawiera on biały kontroler na czarnym tle oraz czarny kontroler na białym tle (przedstawiony na ilustracji 1) w postaci pliku PNG oraz programu Adobe® Illustrator®.

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