بهترین روشهای دسترسپذیری برای Android TV
با مجموعهها، منظم بمانید
ذخیره و طبقهبندی محتوا براساس اولویتهای شما.
این راهنما بهترین روشها را برای دسترسی در Android TV ارائه میکند و توصیههایی برای برنامههای بومی و غیربومی ارائه میدهد.
چرا قابلیت دسترسی برای برنامه تلویزیونی من مهم است؟
اختلالات بینایی در بین جمعیت تماشاگر تلویزیون غیر معمول نیست. بر اساس گزارش سازمان بهداشت جهانی (WHO) حدود 2.2 میلیارد نفر در سراسر جهان دچار اختلال بینایی هستند. بر اساس نظرسنجی مصاحبه ملی سلامت در سال 2018 ، در ایالات متحده، 32 میلیون آمریکایی 18 ساله و بالاتر از دست دادن بینایی قابل توجهی را تجربه کرده اند. بر اساس گزارش اتحادیه نابینایان اروپا (EBU) در اروپا، برآوردها به 30 میلیون نابینا و کم بینا اشاره دارد.
مهمتر از همه، کاربرانی که دارای اختلالات بینایی هستند، به اندازه همتایان خود که بینا هستند، از محتوای رسانه ای لذت می برند. یک نظرسنجی در سال 2017 به سفارش Comcast نشان داد که 96٪ از کاربران نابینا یا کم بینا به طور منظم تلویزیون تماشا می کنند و 81٪ بیش از یک ساعت در روز تماشا می کنند. با این حال، 65٪ نیز گزارش دادند که با مشکلاتی در جستجوی آنچه در تلویزیون است مواجه شده اند. و در یک نظرسنجی در سال 2020 در بریتانیا ، 80٪ از افراد معلول گفتند که مشکلات دسترسی را با خدمات پخش ویدیو بر اساس تقاضا تجربه کرده اند.
در حالی که فناوریهای کمکی میتوانند به کاربران با دید ضعیف کمک کنند، اما حمایت از دسترسی در سفرهای کشف محتوا برای برنامههای تلویزیونی مهم است. به عنوان مثال، به ارائه راهنمایی پیمایش و برچسبگذاری صحیح عناصر توجه بیشتری داشته باشید و اطمینان حاصل کنید که برنامههای تلویزیونی با ویژگیهای دسترسپذیری مانند TalkBack به خوبی کار میکنند. این مراحل می تواند به طور قابل توجهی تجربه را برای کاربران با اختلالات بینایی بهبود بخشد.
اولین قدم برای بهبود دسترسی، آگاهی است. این راهنما میتواند به شما و تیمتان کمک کند تا مشکلات دسترسپذیری برنامه تلویزیونتان را کشف کنید.
منابع دسترسی اندروید
برای کسب اطلاعات بیشتر درباره دسترسپذیری در Android، به منابع توسعه دسترسپذیری ما مراجعه کنید.
مقیاس بندی متن
برنامههای Android TV باید با پشتیبانی از تراکم پیکسلهای مختلف ، به اولویت کاربر برای مقیاسبندی متن احترام بگذارند.
توجه ویژه ای به موارد زیر داشته باشید:
مقیاس متن را می توان با دستور زیر تغییر داد:
adb shell settings put system font_scale 1.2f
در اندروید 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
}
جاوا
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)
}
جاوا
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 و/یا وابستههای آن هستند.
تاریخ آخرین بهروزرسانی 2025-08-27 بهوقت ساعت هماهنگ جهانی.
[[["درک آسان","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 بهوقت ساعت هماهنگ جهانی."],[],[],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```"]]