Best practice di accessibilità per Android TV

Questa guida fornisce le best practice per l'accessibilità su Android TV e raccomandazioni per le app native e non native.

Perché l'accessibilità è importante per la mia app TV?

I problemi di vista non sono rari tra gli spettatori TV. L'OMS stima che 2,2 miliardi di persone in tutto il mondo abbiano problemi di vista, mentre circa 32 milioni di adulti negli Stati Uniti soffrono di una perdita significativa (National Health Interview Survey 2018). In Europa, l'EBU stima che 30 milioni di persone siano interessate.

Gli utenti con disabilità visiva apprezzano i contenuti multimediali tanto quanto i loro coetanei vedenti. Un sondaggio del 2017 di Comcast ha rilevato che il 96% delle persone guarda la TV (l'81% per più di un'ora al giorno). Tuttavia, il 65% segnala problemi con la ricerca di contenuti. Inoltre, l'80% delle persone con disabilità in un sondaggio nel Regno Unito ha segnalato problemi di streaming.

Le tecnologie assistive aiutano, ma le app TV devono supportare l'accessibilità nella scoperta dei contenuti. Presta particolare attenzione alle indicazioni di navigazione e alle etichette degli elementi. Garantisci la compatibilità con funzionalità come TalkBack per migliorare significativamente l'esperienza degli utenti con disabilità visive.

Il primo passo per migliorare l'accessibilità è la consapevolezza. Questa guida può aiutare te e il tuo team a scoprire i problemi di accessibilità della tua app TV.

Risorse per l'accessibilità di Android

Per scoprire di più sull'accessibilità su Android, consulta le nostre risorse per lo sviluppo dell'accessibilità.

Ridimensionamento testo

Le app per Android TV devono rispettare le preferenze dell'utente per il ridimensionamento del testo supportando diverse densità di pixel.

Presta particolare attenzione a:

  • Utilizza wrap_content per le dimensioni nei componenti dell'UI.
  • Assicurati che i layout riorganizzino i componenti man mano che le loro dimensioni cambiano a seconda della scala del testo.
  • Assicurati che i componenti continuino a essere visualizzati sullo schermo con scale di testo più grandi.
  • Non utilizzare unità di dimensione del testo sp per i componenti non flessibili.
  • Controlla il valore di FONT_SCALE per l'aggiustamento nelle visualizzazioni personalizzate:

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

La scala del testo può essere modificata con il seguente comando:

adb shell settings put system font_scale 1.2f

Su Android 12 e versioni successive, gli utenti possono modificare la scalabilità del testo dalle impostazioni del dispositivo.

Layout tastiera

In Android 13 (livello API 33) e versioni successive, puoi utilizzare getKeyCodeForKeyLocation() per cercare i codici chiave per le posizioni previste dei tasti. Potrebbe essere necessario se l'utente ha rimappato alcune posizioni dei tasti o se utilizza una tastiera con un layout non standard.

Descrizione audio

In Android 13 (livello API 33) e versioni successive, una nuova preferenza di accessibilità a livello di sistema consente agli utenti di attivare le descrizioni audio in tutte le app. Le app per Android TV possono controllare la preferenza dell'utente eseguendo una query con 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
}

Le app per Android TV possono monitorare quando le preferenze di un utente cambiano aggiungendo un listener a 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);
}