Prácticas recomendadas de accesibilidad para Android TV

En esta guía, se proporcionan prácticas recomendadas de accesibilidad en Android TV y se incluyen recomendaciones para apps nativas y no nativas.

¿Por qué es importante la accesibilidad para mi app para TVs?

La discapacidad visual no es poco común en la población que mira TV. Se estima que 2,200 millones de personas en todo el mundo tienen discapacidad visual, según la Organización Mundial de la Salud (OMS). En EE.UU., 32 millones de estadounidenses mayores de 18 años experimentaron una pérdida significativa de la visión, según la Encuesta Nacional de Salud de 2018. En Europa, las estimaciones apuntan a 30 millones de personas ciegas y con visión parcial, según la Unión Europea ciega (EBU).

Lo más importante es que los usuarios con discapacidad visual disfrutan del contenido multimedia tanto como sus pares videntes. Una encuesta de 2017 encargada por Comcast mostró que el 96% de los usuarios ciegos o con visión reducida miran TV regularmente, y el 81% mira más de una hora por día. Sin embargo, un 65% también informó tener problemas para buscar lo que hay en la TV. Además, en una encuesta de 2020 realizada en el Reino Unido, el 80% de las personas con discapacidad indicaron que habían tenido problemas de accesibilidad con los servicios de transmisión de video on demand.

Si bien las tecnologías de accesibilidad pueden ayudar a los usuarios con visión reducida (y lo hacen), es importante admitir la accesibilidad en los recorridos de descubrimiento de contenido para las apps para TV. Por ejemplo, presta especial atención a la orientación de navegación y el etiquetado correcto de los elementos, y asegúrate de que las apps para TV funcionen bien con funciones de accesibilidad como TalkBack. Estos pasos pueden mejorar significativamente la experiencia de los usuarios con discapacidad visual.

El primer paso para mejorar la accesibilidad es el reconocimiento. Esta guía puede ayudarte a ti y a tu equipo a descubrir problemas de accesibilidad con tu app para TV.

Recursos de accesibilidad de Android

Para obtener más información sobre la accesibilidad en Android, consulta nuestros recursos de desarrollo de accesibilidad.

Escalamiento de texto

Las apps para Android TV deben respetar las preferencias del usuario por el escalamiento de texto admitiendo diferentes densidades de píxeles.

Presta especial atención a lo siguiente:

  • Usa wrap_content para las dimensiones en los componentes de la IU.
  • Asegúrate de que los diseños reorganicen los componentes a medida que cambian sus dimensiones en función de la escala de texto.
  • Asegúrate de que los componentes aún se ajusten en la pantalla en escalas de texto más grandes.
  • No uses unidades de tamaño de texto sp para componentes que no sean flexibles.
  • Verifica el valor de FONT_SCALE para el ajuste en las vistas personalizadas:

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

Se puede cambiar la escala de texto con el siguiente comando:

adb shell settings put system font_scale 1.2f

En Android 12 y versiones posteriores, los usuarios pueden modificar el escalamiento del texto desde la configuración del dispositivo.

Diseños de teclado

En Android 13 (nivel de API 33) y versiones posteriores, puedes usar getKeyCodeForKeyLocation() para buscar los códigos de teclas de las ubicaciones clave esperadas. Esto podría ser necesario si el usuario volvió a asignar algunas ubicaciones de teclas o si usa un teclado que no tiene un diseño típico.

Audiodescripción

En Android 13 (nivel de API 33) y versiones posteriores, una nueva preferencia de accesibilidad para todo el sistema permite a los usuarios habilitar audiodescripciones en todas las apps. Las apps para Android TV pueden consultar la preferencia del usuario 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
}

Las apps para Android TV pueden supervisar cuándo cambia la preferencia de un usuario agregando un objeto de escucha a AccessbilityManager:

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