أفضل ممارسات إمكانية الوصول لتطبيق Android TV

يوفّر هذا الدليل أفضل الممارسات المتعلّقة بميزات تسهيل الاستخدام على Android TV، كما يقدّم اقتراحات لكل من التطبيقات الأصلية وغير المحلية.

لماذا تُعد إمكانية الوصول مهمة لتطبيق التلفزيون الخاص بي؟

تُعد إعاقات البصر ليست شائعة بين الأشخاص الذين يشاهدون التلفزيون. بحسب منظمة الصحة العالمية (WHO)، إنّ 2.2 مليار شخص على مستوى العالم يعانون من عجز بصري. في الولايات المتحدة، واجه 32 مليون أمريكي من عمر 18 عامًا أو أكثر فقدانًا كبيرًا في الرؤية، وفقًا لاستطلاع مقابلات الصحة الوطنية لعام 2018. في أوروبا، تشير التقديرات إلى 30 مليون شخص كفيف ومبصر جزئيًا، وفقًا للاتحاد الأوروبي للمكفوفين (EBU).

والأهم من ذلك أن المستخدمين الذين يعانون من إعاقات بصرية يستمتعون بمحتوى الوسائط تمامًا مثل أقرانهم المبصرين بالكامل. أشار استطلاع أجرته شركة Comcast في عام 2017 إلى أنّ% 96 من المستخدمين المكفوفين أو ضعاف النظر يشاهدون التلفزيون بانتظام، بينما يشاهد% 81 منهم أكثر من ساعة يوميًا. ومع ذلك، أفاد 65٪ أيضًا عن مواجهة مشكلات في البحث عما يتم عرضه على التلفزيون. وفي استطلاع تم إجراؤه في عام 2020 في المملكة المتحدة، قال 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 (المستوى 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);
}