بهترین روش‌های دسترس‌پذیری برای Android TV

این راهنما بهترین روش‌ها را برای دسترسی در Android TV ارائه می‌کند و توصیه‌هایی برای برنامه‌های بومی و غیربومی ارائه می‌دهد.

چرا قابلیت دسترسی برای برنامه تلویزیونی من مهم است؟

اختلالات بینایی در بین جمعیت تماشاگر تلویزیون غیر معمول نیست. بر اساس گزارش سازمان بهداشت جهانی (WHO) حدود 2.2 میلیارد نفر در سراسر جهان دچار اختلال بینایی هستند. بر اساس نظرسنجی مصاحبه ملی سلامت در سال 2018 ، در ایالات متحده، 32 میلیون آمریکایی 18 ساله و بالاتر از دست دادن بینایی قابل توجهی را تجربه کرده اند. بر اساس گزارش اتحادیه نابینایان اروپا (EBU) در اروپا، برآوردها به 30 میلیون نابینا و کم بینا اشاره دارد.

مهمتر از همه، کاربرانی که دارای اختلالات بینایی هستند، به اندازه همتایان خود که بینا هستند، از محتوای رسانه ای لذت می برند. یک نظرسنجی در سال 2017 به سفارش Comcast نشان داد که 96٪ از کاربران نابینا یا کم بینا به طور منظم تلویزیون تماشا می کنند و 81٪ بیش از یک ساعت در روز تماشا می کنند. با این حال، 65٪ نیز گزارش دادند که با مشکلاتی در جستجوی آنچه در تلویزیون است مواجه شده اند. و در یک نظرسنجی در سال 2020 در بریتانیا ، 80٪ از افراد معلول گفتند که مشکلات دسترسی را با خدمات پخش ویدیو بر اساس تقاضا تجربه کرده اند.

در حالی که فناوری‌های کمکی می‌توانند به کاربران با دید ضعیف کمک کنند، اما حمایت از دسترسی در سفرهای کشف محتوا برای برنامه‌های تلویزیونی مهم است. به عنوان مثال، به ارائه راهنمایی پیمایش و برچسب‌گذاری صحیح عناصر توجه بیشتری داشته باشید و اطمینان حاصل کنید که برنامه‌های تلویزیونی با ویژگی‌های دسترس‌پذیری مانند TalkBack به خوبی کار می‌کنند. این مراحل می تواند به طور قابل توجهی تجربه را برای کاربران با اختلالات بینایی بهبود بخشد.

اولین قدم برای بهبود دسترسی، آگاهی است. این راهنما می‌تواند به شما و تیمتان کمک کند تا مشکلات دسترس‌پذیری برنامه تلویزیونتان را کشف کنید.

منابع دسترسی اندروید

برای کسب اطلاعات بیشتر درباره دسترس‌پذیری در Android، به منابع توسعه دسترس‌پذیری ما مراجعه کنید.

مقیاس بندی متن

برنامه‌های Android TV باید با پشتیبانی از تراکم پیکسل‌های مختلف، به اولویت کاربر برای مقیاس‌بندی متن احترام بگذارند.

توجه ویژه ای به موارد زیر داشته باشید:

  • از wrap_content برای ابعاد در اجزای UI استفاده کنید.
  • اطمینان حاصل کنید که چیدمان ها با تغییر ابعاد آنها بسته به مقیاس متن، اجزا را دوباره مرتب می کنند.
  • اطمینان حاصل کنید که اجزا همچنان در مقیاس های بزرگتر روی صفحه نمایش قرار می گیرند.
  • از واحدهای اندازه متن 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

در اندروید 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);
}