Práticas recomendadas de acessibilidade para o Android TV

Este guia oferece práticas recomendadas de acessibilidade no Android TV e recomendações para apps nativos e não nativos.

Por que a acessibilidade é importante para meu app de TV?

Deficiências visuais são comuns entre espectadores de TV. A OMS estima que 2,2 bilhões de pessoas no mundo têm deficiência visual, enquanto cerca de 32 milhões de adultos nos EUA sofrem perda significativa (Pesquisa Nacional de Entrevistas de Saúde de 2018). Na Europa, a EBU estima que 30 milhões de pessoas sejam afetadas.

Usuários com deficiência visual gostam de mídia tanto quanto pessoas sem deficiência. Uma pesquisa de 2017 da Comcast descobriu que 96% das pessoas assistem TV (81% por mais de uma hora por dia). No entanto, 65% relatam problemas para encontrar conteúdo. Além disso, 80% das pessoas com deficiência em uma pesquisa no Reino Unido relataram problemas de streaming.

As tecnologias adaptativas ajudam, mas os apps de TV precisam oferecer suporte à acessibilidade na descoberta de conteúdo. Preste atenção especial às orientações de navegação e aos rótulos dos elementos. Garanta a compatibilidade com recursos como o TalkBack para melhorar significativamente a experiência dos usuários com deficiência visual.

A primeira etapa para melhorar a acessibilidade é a conscientização. Este guia pode ajudar você e sua equipe a descobrir problemas de acessibilidade no app de TV.

Recursos de acessibilidade do Android

Para saber mais sobre acessibilidade no Android, consulte nossos recursos de desenvolvimento de acessibilidade.

Escala do texto

Os apps para Android TV precisam respeitar a preferência do usuário por escalonamento de texto oferecendo suporte a diferentes densidades de pixel.

Tome cuidado especial para:

  • Use wrap_content para dimensões em componentes de UI.
  • Verifique se os layouts reorganizam os componentes à medida que as dimensões mudam dependendo da escala do texto.
  • Verifique se os componentes ainda cabem na tela em escalas de texto maiores.
  • Não use unidades de tamanho de texto sp para componentes que não são flexíveis.
  • Verifique o valor de FONT_SCALE para ajuste nas visualizações personalizadas:

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

A escala de texto pode ser mudada com o seguinte comando:

adb shell settings put system font_scale 1.2f

No Android 12 e em versões mais recentes, os usuários podem alterar o ajuste de escala do texto nas configurações do dispositivo.

Layouts de teclado

No Android 13 (nível 33 da API) e versões mais recentes, é possível usar getKeyCodeForKeyLocation() para pesquisar os keycodes dos locais de teclas esperados. Isso pode ser necessário se o usuário tiver remapeado alguns locais de teclas ou se estiver usando um teclado com um layout incomum.

Audiodescrição

No Android 13 (nível 33 da API) e em versões mais recentes, uma nova preferência de acessibilidade em todo o sistema permite que os usuários ativem audiodescrições em todos os apps. Os apps do Android TV podem verificar a preferência do usuário consultando-a com 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
}

Os apps do Android TV podem monitorar quando a preferência de um usuário muda adicionando um 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);
}