Sprawdzone metody ułatwień dostępu na Androidzie TV

Ten przewodnik zawiera sprawdzone metody dotyczące dostępności na Androidzie TV oraz rekomendacje dotyczące aplikacji natywnych i nienatywnych.

Dlaczego ułatwienia dostępu są ważne w przypadku mojej aplikacji TV?

Wśród telewidzów nie brakuje osób z wadami wzroku. Według szacunków WHO 2,2 miliarda osób na całym świecie ma problemy ze wzrokiem, a około 32 milionów dorosłych Amerykanów doświadcza znacznej utraty wzroku (2018 r.National Health Interview Survey). Według szacunków Europejskiej Unii Nadawców (EBU) problem dotyczy 30 milionów osób w Europie.

Osoby z wadą wzroku mogą korzystać z multimediów w takim samym stopniu jak osoby widzące. Z badania przeprowadzonego w 2017 r. przez firmę Comcast wynika, że 96% osób ogląda telewizję (81% – ponad godzinę dziennie). Jednak 65% osób zgłasza problemy ze znalezieniem treści. W badaniu przeprowadzonym w Wielkiej Brytanii 80% osób z niepełnosprawnościami zgłosiło problemy z przesyłaniem strumieniowym.

Technologie wspomagające osoby z niepełnosprawnością są pomocne, ale aplikacje telewizyjne muszą obsługiwać ułatwienia dostępu w zakresie odkrywania treści. Zwróć szczególną uwagę na wskazówki nawigacyjne i etykiety elementów. Zadbaj o zgodność z funkcjami takimi jak TalkBack, aby znacznie ułatwić korzystanie z aplikacji osobom z wadami wzroku.

Pierwszym krokiem do poprawy dostępności jest świadomość. Ten przewodnik pomoże Tobie i Twojemu zespołowi wykryć problemy z ułatwieniami dostępu aplikacji TV.

Materiały dotyczące ułatwień dostępu w Androidzie

Więcej informacji o ułatwieniach dostępu na Androidzie znajdziesz w naszych materiałach dla programistów.

Skalowanie tekstu

Aplikacje na Androida TV powinny uwzględniać preferencje użytkownika dotyczące skalowania tekstu, obsługując różne gęstości pikseli.

Zwróć szczególną uwagę na te kwestie:

  • W przypadku wymiarów w komponentach interfejsu używaj wartości wrap_content.
  • Upewnij się, że układy zmieniają rozmieszczenie komponentów w zależności od skali tekstu.
  • Upewnij się, że komponenty nadal mieszczą się na ekranie przy większych skalach tekstu.
  • Nie używaj jednostek rozmiaru tekstu sp w przypadku komponentów, które nie są elastyczne.
  • Sprawdź wartość FONT_SCALE w przypadku dostosowania w widokach niestandardowych:

    // Checking font scale with Context
    val scale = resources.configuration.fontScale
    Log.d(TAG, "Text scale is: " + scale)
    

Skalę tekstu można zmienić za pomocą tego polecenia:

adb shell settings put system font_scale 1.2f

Na urządzeniach z Androidem 12 lub nowszym użytkownicy mogą zmieniać skalowanie tekstu w ustawieniach urządzenia.

Układy klawiatury

W Androidzie 13 (poziom interfejsu API 33) i nowszym możesz użyć getKeyCodeForKeyLocation() do wyszukiwania kodów klawiszy w przypadku oczekiwanych lokalizacji klawiszy. Może to być konieczne, jeśli użytkownik zmienił przypisanie niektórych klawiszy lub używa klawiatury o nietypowym układzie.

Audiodeskrypcja

W Androidzie 13 (API na poziomie 33) i nowszych wersjach systemu nowe ustawienie dostępności na poziomie systemu umożliwia użytkownikom włączenie audiodeskrypcji we wszystkich aplikacjach. Aplikacje na Androida TV mogą sprawdzić preferencje użytkownika, wysyłając zapytanie za pomocą isAudioDescriptionRequested().

Kotlin

private lateinit var accessibilityManager: AccessibilityManager

// In onCreate():
accessibilityManager = getSystemService(AccessibilityManager::class.java)

// Where your media player is initialized
if (am.isAudioDescriptionRequested) {
    // User has requested to enable audio descriptions
}

Java

private AccessibilityManager accessibilityManager;

// In onCreate():
accessibilityManager = getSystemService(AccessibilityManager.class);

// Where your media player is initialized
if(accessibilityManager.isAudioDescriptionRequested()) {
    // User has requested to enable audio descriptions
}

Aplikacje na Androida TV mogą monitorować zmiany preferencji użytkownika, dodając odbiornik do AccessibilityManager:

Kotlin

private val listener =
    AccessibilityManager.AudioDescriptionRequestedChangeListener { enabled ->
        // Preference changed; reflect its state in your media player
    }

override fun onStart() {
    super.onStart()

    accessibilityManager.addAudioDescriptionRequestedChangeListener(mainExecutor, listener)
}

override fun onStop() {
    super.onStop()

    accessibilityManager.removeAudioDescriptionRequestedChangeListener(listener)
}

Java

private AccessibilityManager.AudioDescriptionRequestedChangeListener listener = enabled -> {
    // Preference changed; reflect its state in your media player
};

@Override
protected void onStart() {
    super.onStart();

    accessibilityManager.addAudioDescriptionRequestedChangeListener(getMainExecutor(), listener);
}

@Override
protected void onStop() {
    super.onStop();

    accessibilityManager.removeAudioDescriptionRequestedChangeListener(listener);
}