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 systemeigene und nicht systemeigene Apps.

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

Sehbehinderungen sind bei TV-Zuschauern nicht ungewöhnlich. Die WHO schätzt, dass 2,2 Milliarden Menschen weltweit eine Sehbehinderung haben.In den USA haben etwa 32 Millionen Erwachsene eine erhebliche Sehbehinderung (2018 National Health Interview Survey). In Europa schätzt die EBU, dass 30 Millionen betroffen sind.

Nutzer mit eingeschränktem Sehvermögen nutzen Medien genauso gern wie Nutzer ohne Sehbehinderung. Laut einer Umfrage von Comcast aus dem Jahr 2017 sehen sich 96% der Befragten Fernsehen an (81% mehr als eine Stunde täglich). Dennoch geben 65% der Nutzer an, Probleme beim Finden von Inhalten zu haben. Außerdem gaben 80% der Menschen mit Behinderungen in einer Umfrage im Vereinigten Königreich an, dass sie Probleme beim Streamen haben.

Hilfstechnologien sind hilfreich, aber TV-Apps müssen die Barrierefreiheit bei der Suche nach Inhalten unterstützen. Achten Sie besonders auf die Navigationsanleitung und die Elementlabels. Achten Sie auf Kompatibilität mit Funktionen wie TalkBack, um die Nutzerfreundlichkeit für Nutzer mit Sehbehinderungen deutlich zu verbessern.

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

Ressourcen zu Android-Bedienungshilfen

Weitere Informationen zur Barrierefreiheit unter Android

Text-Skalierung

Android TV-Apps sollten die Einstellungen der Nutzer für die Textskalierung berücksichtigen, indem sie verschiedene Pixeldichten unterstützen.

Achten Sie besonders auf Folgendes:

  • Verwenden Sie wrap_content für Dimensionen in UI-Komponenten.
  • Achten Sie darauf, dass Komponenten in Layouts neu angeordnet werden, wenn sich ihre Abmessungen je nach Textskalierung ändern.
  • Achten Sie darauf, dass Komponenten auch bei größeren Textskalierungen auf den Bildschirm passen.
  • Verwenden Sie keine sp-Einheiten für die Textgröße 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 Textskalierung 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 Textskalierung in den Geräteeinstellungen ändern.

Tastaturlayouts

In Android 13 (API‑Level 33) und höher können Sie getKeyCodeForKeyLocation() verwenden, um die Tastencodes für erwartete Tastenpositionen abzurufen. Das kann erforderlich sein, wenn der Nutzer einige Tasten neu zugeordnet hat oder eine Tastatur mit einem ungewöhnlichen Layout verwendet.

Audiodeskription

In Android 13 (API‑Level 33) und höher können Nutzer mit einer neuen systemweiten Einstellung für Barrierefreiheit Audiodeskriptionen für alle Apps aktivieren. Android TV-Apps können die Nutzereinstellung abrufen, indem sie sie mit isAudioDescriptionRequested() abfragen.

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 Nutzereinstellungen erkennen, indem sie einen Listener zu AccessibilityManager hinzufü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);
}