أفضل ممارسات إمكانية الوصول لتطبيق Android TV
تنظيم صفحاتك في مجموعات
يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.
يقدّم هذا الدليل أفضل الممارسات المتعلّقة بتسهيل الاستخدام على Android TV، كما يقدّم اقتراحات للتطبيقات الأصلية وغير الأصلية.
ما أهمية تسهيل الاستخدام في تطبيق التلفزيون؟
إنّ مشاكل النظر شائعة بين الأشخاص الذين يشاهدون التلفزيون.
وفقًا لمنظمة الصحة العالمية، يعاني 2.2 مليار شخص حول العالم من مشاكل تتعلّق بالرؤية. في الولايات المتحدة، عانى 32 مليون أمريكي تبلغ أعمارهم 18 عامًا أو أكثر من فقدان كبير في البصر، وذلك وفقًا لمسح المقابلات الصحية الوطنية لعام 2018.
تشير التقديرات في أوروبا إلى أنّ عدد الأشخاص المكفوفين أو الذين يعانون ضعفًا في البصر يبلغ 30 مليون شخص، وذلك وفقًا للاتحاد الأوروبي للمكفوفين (EBU).
والأهم من ذلك، أنّ المستخدمين الذين يعانون ضعفًا في النظر يستمتعون بالمحتوى الإعلامي
مثلهم مثل غيرهم من المستخدمين الذين لا يعانون أي مشاكل في النظر. أظهر استطلاع أجري في العام 2017 بتكليف من شركة Comcast أنّ% 96 من المستخدمين المكفوفين أو ضعاف البصر يشاهدون التلفزيون بانتظام، وأنّ% 81 منهم يشاهدون التلفزيون لأكثر من ساعة واحدة في اليوم. في المقابل، أفاد% 65 من المشاركين أيضًا بأنّهم يواجهون مشاكل في البحث عن البرامج التلفزيونية. وفي استطلاع أُجري في المملكة المتحدة عام 2020، قال% 80 من الأشخاص ذوي الإعاقة إنّهم واجهوا مشاكل في إمكانية الوصول إلى خدمات بث الفيديو عند الطلب.
على الرغم من أنّ التقنيات المساعدة يمكن أن تساعد المستخدمين الذين يعانون من ضعف في النظر، من المهم توفير إمكانية الوصول في رحلات اكتشاف المحتوى لتطبيقات التلفزيون.
على سبيل المثال، يجب التركيز بشكل خاص على تقديم إرشادات التنقّل وتصنيف العناصر بشكل صحيح، والتأكّد من أنّ تطبيقات التلفزيون تعمل بشكل جيد مع ميزات تسهيل الاستخدام، مثل TalkBack. يمكن أن تساعد هذه الخطوات بشكل كبير في تحسين تجربة المستخدمين الذين يعانون من ضعف في النظر.
الخطوة الأولى نحو تحسين إمكانية الوصول هي التوعية. يمكن أن يساعدك هذا الدليل أنت وفريقك في رصد مشاكل تسهيل الاستخدام في تطبيقك على التلفزيون.
مراجع حول تسهيل استخدام Android
لمزيد من المعلومات حول تسهيل الاستخدام على Android، يمكنك الاطّلاع على موارد تطوير أدوات تسهيل الاستخدام.
تكبير حجم النص
يجب أن تراعي تطبيقات Android TV خيار المستخدم بشأن تكبير حجم النص من خلال إتاحة كثافات وحدات بكسل مختلفة.
يجب الانتباه جيدًا إلى ما يلي:
يمكن تغيير مقياس النص باستخدام الأمر التالي:
adb shell settings put system font_scale 1.2f
في الإصدار 12 من نظام التشغيل Android والإصدارات الأحدث، يمكن للمستخدمين تغيير حجم النص من إعدادات الجهاز.
تخطيطات لوحة المفاتيح
في الإصدار 13 من نظام التشغيل Android (المستوى 33 لواجهة برمجة التطبيقات) والإصدارات الأحدث، يمكنك استخدام
getKeyCodeForKeyLocation()
من أجل
البحث عن رموز المفاتيح
للمواقع المتوقّعة للمفاتيح.
قد يكون ذلك ضروريًا إذا أعاد المستخدم تعيين بعض مواقع المفاتيح أو إذا كان يستخدم لوحة مفاتيح لا تتضمّن تخطيطًا نموذجيًا.
وصف الصوت
في نظام التشغيل Android 13 (المستوى 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);
}
يخضع كل من المحتوى وعيّنات التعليمات البرمجية في هذه الصفحة للتراخيص الموضحّة في ترخيص استخدام المحتوى. إنّ Java و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```"]]