Рекомендации по обеспечению специальных возможностей для Android TV

В этом руководстве представлены лучшие практики обеспечения доступности на Android TV, а также рекомендации как для нативных, так и для сторонних приложений.

Почему доступность важна для моего приложения для телевизора?

Нарушения зрения не являются редкостью среди телезрителей. По оценкам ВОЗ, в мире 2,2 миллиарда человек страдают от нарушений зрения, а около 32 миллионов взрослых жителей США испытывают значительную потерю зрения ( Национальный опрос состояния здоровья 2018 года ). В Европе, по оценкам Европейского вещательного союза (EBU), от этих проблем страдают 30 миллионов человек .

Пользователи с нарушениями зрения получают от просмотра медиаконтента такое же удовольствие, как и зрячие. Опрос Comcast 2017 года показал, что 96% из них смотрят телевизор (81% более часа в день). Однако 65% сообщают о проблемах с поиском контента. Кроме того, 80% людей с инвалидностью в ходе опроса в Великобритании сообщили о проблемах с потоковым вещанием.

Вспомогательные технологии помогают, но телевизионные приложения должны обеспечивать доступность при поиске контента. Особое внимание следует уделить навигационным подсказкам и подписям к элементам. Необходимо обеспечить совместимость с такими функциями, как TalkBack, чтобы значительно улучшить взаимодействие с пользователями с нарушениями зрения.

Первый шаг к улучшению доступности — это повышение осведомленности. Это руководство поможет вам и вашей команде выявить проблемы с доступностью вашего приложения для телевизора.

Ресурсы доступности Android

Чтобы узнать больше о доступности Android, ознакомьтесь с нашими ресурсами по разработке приложений с учетом требований доступности .

Масштабирование текста

Приложения для Android TV должны учитывать предпочтения пользователя в отношении масштабирования текста, поддерживая различную плотность пикселей .

Особое внимание следует уделить:

  • Для указания размеров в компонентах пользовательского интерфейса используйте wrap_content .
  • Убедитесь, что макеты перестраивают компоненты в зависимости от изменения их размеров и масштаба текста.
  • Убедитесь, что компоненты по-прежнему помещаются на экране при увеличении масштаба текста.
  • Не используйте единицы измерения размера текста в SP для компонентов, которые не являются гибкими.
  • Проверьте значение параметра FONT_SCALE для корректировки в пользовательских представлениях:

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

Масштаб текста можно изменить с помощью следующей команды:

adb shell settings put system font_scale 1.2f

На устройствах Android 12 и более поздних версий пользователи могут изменять масштаб текста в настройках устройства.

Раскладки клавиатуры

В Android 13 (уровень API 33) и выше можно использовать getKeyCodeForKeyLocation() для поиска кодов клавиш для ожидаемых мест их расположения. Это может потребоваться, если пользователь переназначил некоторые клавиши или использует клавиатуру с нестандартной раскладкой.

Аудиоописание

В Android 13 (уровень API 33) и выше появилась новая общесистемная настройка специальных возможностей, позволяющая пользователям включать звуковое описание во всех приложениях. Приложения для Android TV могут проверить настройку пользователя, запросив её с помощью isAudioDescriptionRequested() .

Котлин

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 могут отслеживать изменения пользовательских настроек, добавив обработчик событий в AccessibilityManager :

Котлин

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