В этом руководстве представлены лучшие практики обеспечения доступности на 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);
}