Best Practices für Bedienungshilfen bei Android TV

In diesem Leitfaden finden Sie Best Practices für die Barrierefreiheit auf Android TV sowie Empfehlungen für native und nicht native Apps.

Warum ist Barrierefreiheit für meine TV-App wichtig?

Sehbehinderungen sind bei Fernsehzuschauern nicht ungewöhnlich. Die WHO schätzt, dass weltweit 2,2 Milliarden Menschen eine Sehbehinderung haben.In den USA leiden etwa 32 Millionen Erwachsene an einem erheblichen Sehverlust (National Health Interview Survey 2018). In Europa sind laut der EBU 30 Millionen Menschen betroffen.

Nutzer mit Sehbehinderung genießen Medien genauso wie sehende Nutzer. Laut einer Umfrage von Comcast aus dem Jahr 2017 sehen sich 96% der Befragten Fernsehen an (81% mehr als eine Stunde täglich). 65% der Befragten haben jedoch Probleme, Inhalte zu finden. Außerdem gaben 80% der Menschen mit Behinderung in einer Umfrage im Vereinigten Königreich an, Probleme mit dem Streaming zu haben.

Assistive Technologien können helfen, aber TV-Apps müssen die Barrierefreiheit bei der Suche nach Inhalten unterstützen. Achten Sie besonders auf die Navigationsanleitung und die Elementlabels. Durch die Kompatibilität mit Funktionen wie TalkBack können Sie die Nutzerfreundlichkeit für Nutzer mit Sehbehinderung erheblich verbessern.

Der erste Schritt zur Verbesserung der Barrierefreiheit ist das Bewusstsein dafür. Dieser Leitfaden kann Ihnen und Ihrem Team helfen, Probleme mit der Barrierefreiheit Ihrer TV-App zu erkennen.

Android-Ressourcen zur Barrierefreiheit

Weitere Informationen zur Barrierefreiheit auf Android finden Sie in unseren Ressourcen zur Entwicklung von barrierefreien Apps.

Text-Skalierung

Android TV-Apps sollten die Einstellung des Nutzers zur Text-Skalierung berücksichtigen und verschiedene Pixeldichten unterstützen.

Achten Sie besonders auf Folgendes:

  • Verwenden Sie wrap_content für Dimensionen in UI-Komponenten.
  • Achten Sie darauf, dass Layouts Komponenten neu anordnen, wenn sich ihre Dimensionen je nach Text-Skalierung ändern.
  • Achten Sie darauf, dass Komponenten auch bei größeren Text-Skalierungen auf den Bildschirm passen.
  • Verwenden Sie keine sp-Textgrößeneinheiten für Komponenten, die nicht flexibel sind.
  • Prüfen Sie den Wert von FONT_SCALE für die Anpassung in benutzerdefinierten Ansichten:

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

Die Text-Skalierung kann mit dem folgenden Befehl geändert werden:

adb shell settings put system font_scale 1.2f

Unter Android 12 und höher können Nutzer die Text-Skalierung in den Geräteeinstellungen ändern.

Tastaturlayouts

Unter Android 13 (API-Level 33) und höher können Sie mit getKeyCodeForKeyLocation() die Tastencodes für die erwarteten Tastenpositionen suchen. Dies kann erforderlich sein, wenn der Nutzer einige Tastenpositionen neu zugeordnet hat oder eine Tastatur mit einem ungewöhnlichen Layout verwendet.

Audiodeskription

Unter Android 13 (API-Level 33) und höher können Nutzer mit einer neuen systemweiten Einstellung für die Barrierefreiheit Audiodeskriptionen in allen Apps aktivieren. Android TV-Apps können die Einstellung des Nutzers abfragen, indem sie isAudioDescriptionRequested() verwenden.

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
}

Android TV-Apps können Änderungen an den Einstellungen eines Nutzers erfassen, indem sie einen Listener zu AccessibilityManagerhinzufügen:

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);
}