Prácticas recomendadas de accesibilidad para Android TV

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

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

Los problemas de visión son frecuentes entre los usuarios de TV. La OMS estima que 2,200 millones de personas en todo el mundo tienen problemas de visión, mientras que alrededor de 32 millones de adultos en EE.UU. experimentan una pérdida significativa (Encuesta Nacional de Entrevistas de Salud de 2018). En Europa, la EBU estima que 30 millones de personas se ven afectadas.

Los usuarios con discapacidad visual disfrutan del contenido multimedia tanto como sus pares que no tienen esta discapacidad. Una encuesta de Comcast de 2017 reveló que el 96% de los encuestados mira la TV (el 81% más de una hora por día). Sin embargo, el 65% informa que tiene problemas para encontrar contenido. Además, el 80% de las personas con discapacidad en una encuesta del Reino Unido informó problemas de transmisión.

Las tecnologías de accesibilidad ayudan, pero las apps para TVs deben admitir la accesibilidad en el descubrimiento de contenido. Presta especial atención a las indicaciones de navegación y las etiquetas de los elementos. Asegúrate de que sea compatible con funciones como TalkBack para mejorar significativamente la experiencia de los usuarios con discapacidad visual.

El primer paso para mejorar la accesibilidad es la conciencia. Esta guía puede ayudarte a ti y a tu equipo a descubrir problemas de accesibilidad en tu app para TVs.

Recursos de accesibilidad de Android

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

Ajuste de texto

Las apps para Android TV deben respetar la preferencia del usuario por el ajuste de escala del 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 según la escala de texto.
  • Asegúrate de que los componentes sigan cabiendo en la pantalla con 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)
    

La escala de texto se puede cambiar con el siguiente comando:

adb shell settings put system font_scale 1.2f

En Android 12 y versiones posteriores, los usuarios pueden modificar el ajuste de 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 de teclas esperadas. Esto puede ser necesario si el usuario reasignó 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 verificar la preferencia del usuario consultándola 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 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);
}