Android TV 접근성 권장사항
컬렉션을 사용해 정리하기
내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.
이 가이드에서는 Android TV의 접근성에 관한 권장사항을 제공하고 네이티브 앱과 비네이티브 앱 모두에 관한 권장사항을 제공합니다.
TV 앱에서 접근성이 중요한 이유는 무엇인가요?
TV 시청 인구 중 시각장애가 있는 사람은 드물지 않습니다.
세계보건기구 (WHO)에 따르면 전 세계적으로 22억 명이 시각 장애를 가지고 있는 것으로 추정됩니다. 2018년 전국 건강 인터뷰 설문조사에 따르면 미국에서 18세 이상의 미국인 3,200만 명이 심각한 시력 손실을 경험했습니다.
유럽에서는 유럽시각장애인연합 (EBU)에 따르면 시각장애인과 부분 시각장애인이 3천만 명에 달하는 것으로 추정됩니다.
무엇보다 시각 장애가 있는 사용자는 시력이 있는 사용자와 마찬가지로 미디어 콘텐츠를 즐깁니다. Comcast에서 의뢰한 2017년 설문조사에 따르면 시각 장애가 있거나 시력이 낮은 사용자의 96% 가 정기적으로 TV를 시청하며, 81% 는 하루에 1시간 이상 시청합니다. 하지만 65% 는 TV에서 어떤 프로그램을 시청할지 찾는 데 문제가 있다고 답했습니다. 2020년 영국에서 실시한 설문조사에 따르면 장애인의 80% 가 주문형 동영상 스트리밍 서비스에서 접근성 문제를 경험한 것으로 나타났습니다.
보조 기술은 저시력 사용자에게 도움이 될 수 있지만 TV 앱의 콘텐츠 검색 여정에서 접근성을 지원하는 것이 중요합니다.
예를 들어 탐색 안내를 제공하고 요소를 적절하게 라벨링하는 데 각별히 주의하고 TV 앱이 TalkBack과 같은 접근성 기능과 잘 작동하는지 확인하세요. 이 단계를 따르면 시각 장애가 있는 사용자의 환경을 크게 개선할 수 있습니다.
접근성을 개선하기 위한 첫 번째 단계는 인식입니다. 이 가이드는 개발자와 개발팀이 TV 앱의 접근성 문제를 파악하는 데 도움이 됩니다.
Android 접근성 리소스
Android의 접근성에 대해 자세히 알아보려면 접근성 개발 리소스를 참고하세요.
텍스트 크기 조정
Android TV 앱은 다양한 픽셀 밀도를 지원하여 텍스트 크기 조절에 관한 사용자의 환경설정을 따라야 합니다.
다음 사항에 특히 주의하세요.
다음 명령어를 사용하여 텍스트 크기를 변경할 수 있습니다.
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
}
자바
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);
}
이 페이지에 나와 있는 콘텐츠와 코드 샘플에는 콘텐츠 라이선스에서 설명하는 라이선스가 적용됩니다. 자바 및 OpenJDK는 Oracle 및 Oracle 계열사의 상표 또는 등록 상표입니다.
최종 업데이트: 2025-08-27(UTC)
[[["이해하기 쉬움","easyToUnderstand","thumb-up"],["문제가 해결됨","solvedMyProblem","thumb-up"],["기타","otherUp","thumb-up"]],[["필요한 정보가 없음","missingTheInformationINeed","thumb-down"],["너무 복잡함/단계 수가 너무 많음","tooComplicatedTooManySteps","thumb-down"],["오래됨","outOfDate","thumb-down"],["번역 문제","translationIssue","thumb-down"],["샘플/코드 문제","samplesCodeIssue","thumb-down"],["기타","otherDown","thumb-down"]],["최종 업데이트: 2025-08-27(UTC)"],[],[],null,["# Accessibility best practices for Android TV\n\nThis guide provides best practices for accessibility on Android TV and provides\nrecommendations for both native and non-native apps.\n\nWhy is accessibility important for my TV app?\n---------------------------------------------\n\nVision impairments are not uncommon among the TV-watching population.\nAn estimated [2.2 billion people globally](https://www.who.int/health-topics/blindness-and-vision-loss#tab=tab_1)\nhave a vision impairment, according\nto the World Health Organization (WHO). In the US, 32 million Americans age 18 and older have experienced\nsignificant vision loss,\naccording to the [2018 National Health Interview Survey](https://www.afb.org/research-and-initiatives/statistics/adults).\nIn Europe, the estimates\npoint to [30 million](http://www.euroblind.org/about-blindness-and-partial-sight/facts-and-figures#:%7E:text=Statistics,sighted%20persons%20as%20blind%20persons)\nblind and partially sighted persons, according to the European Blind Union (EBU).\n\nMost importantly, users with vision impairments enjoy media content\njust as much as their fully sighted peers. A [2017 survey](https://www.afb.org/research-and-initiatives/statistics/adults) commissioned by Comcast\nshowed that 96% of users who are blind or have low vision regularly watch\nTV, with 81% watching more than an hour per day. However, 65% also reported\nencountering problems with looking up what's on TV. And in a [2020 survey in the\nUK](https://bighack.org/video-on-demand-streaming-and-accessibility-the-big-hack-survey-feedback/),\n80% of disabled people said they had experienced accessibility issues with video\non-demand streaming services.\n\nWhile assistive technologies can and do help users with low vision, it's\nimportant to support accessibility in content discovery journeys for TV apps.\nFor example, pay extra attention to providing navigation guidance and\nproperly labeling elements, and ensure that TV apps work well with accessibility\nfeatures like TalkBack. These steps can significantly improve the experience for\nusers with vision impairments.\n\nThe first step toward improving accessibility is awareness. This guide can\nhelp you and your team to uncover accessibility issues with your TV app.\n\n### Android accessibility resources\n\nTo learn more about accessibility on Android, see our [accessibility development resources](/guide/topics/ui/accessibility).\n\nText scaling\n------------\n\nAndroid TV apps should respect the user's preference for text scaling by [supporting different pixel densities](/training/multiscreen/screendensities#TaskUseDP).\n\nTake special care to:\n\n- Use `wrap_content` for dimensions in UI components.\n- Ensure that layouts rearrange components as their dimensions change depending on the text scale.\n- Ensure that components still fit on the screen at larger text scales.\n- Don't use sp text size units for components that are not flexible.\n- Check the value of `FONT_SCALE` for adjustment in custom views:\n\n // Checking font scale with Context\n val scale = resources.configuration.fontScale\n Log.d(TAG, \"Text scale is: \" + scale)\n\nThe text scale can be changed with the following command: \n\n adb shell settings put system font_scale 1.2f\n\nOn Android 12 and above, users can alter the text scaling from the device\nsettings.\n\nKeyboard layouts\n----------------\n\nIn Android 13 (API level 33) and higher, you can use\n[`getKeyCodeForKeyLocation()`](/reference/android/view/InputDevice#getKeyCodeForKeyLocation(int))\nto\n[look up the keycodes](/training/tv/games#keyboard-layouts) for\nexpected key locations.\nThis might be necessary if the user has re-mapped some key locations or if they\nare using a keyboard that does not have a typical layout.\n\nAudio description\n-----------------\n\nIn Android 13 (API level 33) and higher, a new system-wide accessibility preference\nlets users enable audio descriptions across all apps. Android TV apps can\ncheck the user's preference by querying it with\n[`isAudioDescriptionRequested()`](/reference/android/view/accessibility/AccessibilityManager#isAudioDescriptionRequested()). \n\n### Kotlin\n\n```kotlin\nprivate lateinit var accessibilityManager: AccessibilityManager\n\n// In onCreate():\naccessibilityManager = getSystemService(AccessibilityManager::class.java)\n\n// Where your media player is initialized\nif (am.isAudioDescriptionRequested) {\n // User has requested to enable audio descriptions\n}\n```\n\n### Java\n\n```java\nprivate AccessibilityManager accessibilityManager;\n\n// In onCreate():\naccessibilityManager = getSystemService(AccessibilityManager.class);\n\n// Where your media player is initialized\nif(accessibilityManager.isAudioDescriptionRequested()) {\n // User has requested to enable audio descriptions\n}\n```\n\nAndroid TV apps can monitor when a user's preference changes by\nadding a listener to\n[`AccessibilityManager`](/reference/android/view/accessibility/AccessibilityManager): \n\n### Kotlin\n\n```kotlin\nprivate val listener =\n AccessibilityManager.AudioDescriptionRequestedChangeListener { enabled -\u003e\n // Preference changed; reflect its state in your media player\n }\n\noverride fun onStart() {\n super.onStart()\n\n accessibilityManager.addAudioDescriptionRequestedChangeListener(mainExecutor, listener)\n}\n\noverride fun onStop() {\n super.onStop()\n\n accessibilityManager.removeAudioDescriptionRequestedChangeListener(listener)\n}\n```\n\n### Java\n\n```java\nprivate AccessibilityManager.AudioDescriptionRequestedChangeListener listener = enabled -\u003e {\n // Preference changed; reflect its state in your media player\n};\n\n@Override\nprotected void onStart() {\n super.onStart();\n\n accessibilityManager.addAudioDescriptionRequestedChangeListener(getMainExecutor(), listener);\n}\n\n@Override\nprotected void onStop() {\n super.onStop();\n\n accessibilityManager.removeAudioDescriptionRequestedChangeListener(listener);\n}\n```"]]