Android TV 접근성 권장사항

이 가이드에서는 Android TV의 접근성에 관한 권장사항을 제공하며 네이티브 앱과 비 네이티브 앱 모두를 위한 권장사항을 제공합니다.

TV 앱에서 접근성이 중요한 이유는 무엇인가요?

시각 장애는 TV를 시청하는 사람들에게 드문 일이 아닙니다. 세계보건기구 (WHO)에 따르면 전 세계적으로 약 22억 명이 시각 장애를 겪고 있습니다. 2018 National Health Interview Survey에 따르면 미국의 18세 이상 미국인 중 3,200만 명이 상당한 시력 상실을 경험했습니다. 유럽 맹인 연맹 (EBU)에 따르면 유럽의 경우 시각장애인과 부분적으로만 보이는 사람은 3천만 명으로 추산됩니다.

무엇보다도 시각 장애가 있는 사용자는 온전히 정상인 동료만큼이나 미디어 콘텐츠를 즐깁니다. Comcast가 의뢰한 2017년 설문조사에 따르면 시각장애인 또는 저시력 사용자의 96% 가 정기적으로 TV를 시청하며 81% 는 매일 1시간 이상 TV를 시청합니다. 하지만 65% 는 TV에서 방영 중인 프로그램을 찾는 데 문제가 있다고 보고했습니다. 또한 2020년 영국 설문조사에서는 장애인의 80% 가 주문형 동영상 스트리밍 서비스에서 접근성 문제를 경험한 적이 있다고 답했습니다.

보조 기술은 저시력 사용자에게도 도움이 될 수 있지만 TV 앱의 콘텐츠 검색 여정에서 접근성을 지원하는 것이 중요합니다. 예를 들어 탐색 안내를 제공하고 요소에 적절하게 라벨을 지정하는 데 각별한 주의를 기울이고 TV 앱이 TalkBack과 같은 접근성 기능과 잘 호환되도록 해야 합니다. 이러한 단계를 통해 시각 장애가 있는 사용자의 사용 환경을 크게 개선할 수 있습니다.

접근성을 개선하는 첫 번째 단계는 인지도 제고입니다. 이 가이드는 개발자 및 팀이 TV 앱의 접근성 문제를 발견하는 데 도움이 될 수 있습니다.

Android 접근성 리소스

Android의 접근성에 관해 자세히 알아보려면 접근성 개발 리소스를 참고하세요.

텍스트 크기 조정

Android TV 앱은 다양한 픽셀 밀도를 지원하여 텍스트 크기 조정에 대한 사용자의 환경설정을 존중해야 합니다.

다음 사항에 특히 주의하세요.

  • UI 구성요소의 크기에는 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()로 쿼리하여 사용자의 환경설정을 확인할 수 있습니다.

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
}

Android TV 앱은 리스너를 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);
}