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

این راهنما بهترین شیوه‌ها را برای دسترسی‌پذیری در اندروید تی‌وی ارائه می‌دهد و توصیه‌هایی را برای برنامه‌های بومی و غیربومی ارائه می‌دهد.

چرا دسترسی‌پذیری برای برنامه تلویزیونی من مهم است؟

اختلالات بینایی در بین جمعیت تماشاگران تلویزیون غیرمعمول نیست. طبق گزارش سازمان بهداشت جهانی (WHO)، تخمین زده می‌شود که ۲.۲ میلیارد نفر در سراسر جهان دچار اختلال بینایی هستند. طبق نظرسنجی مصاحبه ملی سلامت در سال ۲۰۱۸ ، در ایالات متحده، ۳۲ میلیون آمریکایی ۱۸ ساله و بالاتر، کاهش قابل توجه بینایی را تجربه کرده‌اند. طبق گزارش اتحادیه نابینایان اروپا (EBU)، در اروپا، تخمین‌ها به ۳۰ میلیون فرد نابینا و کم‌بینا اشاره دارد.

از همه مهم‌تر، کاربران دارای اختلالات بینایی به اندازه افراد کاملاً بینا از محتوای رسانه‌ای لذت می‌برند. یک نظرسنجی که در سال ۲۰۱۷ توسط کامکست انجام شد، نشان داد که ۹۶٪ از کاربران نابینا یا کم‌بینا مرتباً تلویزیون تماشا می‌کنند و ۸۱٪ آنها بیش از یک ساعت در روز تلویزیون تماشا می‌کنند. با این حال، ۶۵٪ نیز گزارش دادند که در جستجوی برنامه‌های تلویزیون با مشکل مواجه شده‌اند. و در یک نظرسنجی در سال ۲۰۲۰ در بریتانیا ، ۸۰٪ از افراد دارای معلولیت گفتند که با مشکلات دسترسی به سرویس‌های پخش آنلاین ویدیو مواجه شده‌اند.

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

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

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

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

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

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

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

  • برای ابعاد در کامپوننت‌های رابط کاربری از 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

در اندروید ۱۲ و بالاتر، کاربران می‌توانند مقیاس‌بندی متن را از تنظیمات دستگاه تغییر دهند.

طرح‌بندی‌های صفحه‌کلید

در اندروید ۱۳ (سطح API ۳۳) و بالاتر، می‌توانید getKeyCodeForKeyLocation() برای جستجوی کدهای کلید برای مکان‌های مورد انتظار کلید استفاده کنید. این کار ممکن است در صورتی که کاربر برخی از مکان‌های کلید را دوباره نگاشت کرده باشد یا اگر از کیبوردی استفاده می‌کند که طرح‌بندی معمولی ندارد، ضروری باشد.

توضیحات صوتی

در اندروید ۱۳ (سطح API ۳۳) و بالاتر، یک اولویت دسترسی جدید در سطح سیستم به کاربران امکان می‌دهد توضیحات صوتی را در همه برنامه‌ها فعال کنند. برنامه‌های 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);
}