Các phương pháp hay nhất về hỗ trợ tiếp cận cho Android TV

Hướng dẫn này trình bày các phương pháp hay nhất để hỗ trợ tiếp cận trên Android TV và đưa ra các đề xuất cho cả ứng dụng gốc và ứng dụng không phải ứng dụng gốc.

Tại sao khả năng tiếp cận lại quan trọng đối với ứng dụng truyền hình của tôi?

Không ít người xem truyền hình bị suy giảm thị lực. Theo ước tính của WHO, 2,2 tỷ người trên toàn cầu bị suy giảm thị lực, trong khi khoảng 32 triệu người trưởng thành ở Hoa Kỳ bị suy giảm thị lực đáng kể (Khảo sát phỏng vấn sức khoẻ quốc gia năm 2018). Ở Châu Âu, EBU ước tính có 30 triệu người bị ảnh hưởng.

Người dùng khiếm thị cũng có thể thưởng thức nội dung nghe nhìn như những người dùng có thị lực bình thường. Một khảo sát năm 2017 của Comcast cho thấy 96% người dùng xem TV (81% xem hơn một giờ mỗi ngày). Tuy nhiên, 65% người dùng cho biết họ gặp vấn đề khi tìm nội dung. Ngoài ra, 80% người khuyết tật trong một khảo sát ở Vương quốc Anh cho biết họ gặp vấn đề khi phát trực tuyến.

Công nghệ hỗ trợ có thể giúp ích, nhưng các ứng dụng TV phải hỗ trợ tính năng hỗ trợ tiếp cận trong quá trình khám phá nội dung. Đặc biệt chú ý đến hướng dẫn điều hướng và nhãn của các phần tử. Đảm bảo khả năng tương thích với các tính năng như TalkBack để cải thiện đáng kể trải nghiệm cho người dùng khiếm thị.

Bước đầu tiên để cải thiện khả năng hỗ trợ tiếp cận là nâng cao nhận thức. Hướng dẫn này có thể giúp bạn và nhóm của bạn phát hiện các vấn đề về khả năng tiếp cận trong ứng dụng truyền hình.

Tài nguyên hỗ trợ tiếp cận của Android

Để tìm hiểu thêm về tính năng hỗ trợ tiếp cận trên Android, hãy xem các tài nguyên phát triển tính năng hỗ trợ tiếp cận của chúng tôi.

Chia tỷ lệ văn bản

Các ứng dụng Android TV phải tuân theo lựa chọn ưu tiên của người dùng về việc chia tỷ lệ văn bản bằng cách hỗ trợ nhiều mật độ điểm ảnh.

Hãy đặc biệt chú ý đến:

  • Sử dụng wrap_content cho các phương diện trong thành phần giao diện người dùng.
  • Đảm bảo rằng bố cục sắp xếp lại các thành phần khi kích thước của chúng thay đổi tuỳ thuộc vào tỷ lệ văn bản.
  • Đảm bảo các thành phần vẫn vừa với màn hình ở tỷ lệ văn bản lớn hơn.
  • Đừng sử dụng đơn vị kích thước văn bản sp cho các thành phần không linh hoạt.
  • Kiểm tra giá trị của FONT_SCALE để điều chỉnh trong chế độ xem tuỳ chỉnh:

    // Checking font scale with Context
    val scale = resources.configuration.fontScale
    Log.d(TAG, "Text scale is: " + scale)
    

Bạn có thể thay đổi tỷ lệ văn bản bằng lệnh sau:

adb shell settings put system font_scale 1.2f

Trên Android 12 trở lên, người dùng có thể thay đổi tỷ lệ văn bản trong phần cài đặt thiết bị.

Bố cục bàn phím

Trong Android 13 (API cấp 33) trở lên, bạn có thể dùng getKeyCodeForKeyLocation() để tra cứu mã khoá cho các vị trí khoá dự kiến. Điều này có thể cần thiết nếu người dùng đã ánh xạ lại một số vị trí khoá hoặc nếu họ đang sử dụng bàn phím không có bố cục thông thường.

Nút mô tả bằng âm thanh

Trong Android 13 (cấp độ API 33) trở lên, một lựa chọn ưu tiên mới về khả năng hỗ trợ tiếp cận trên toàn hệ thống cho phép người dùng bật nội dung mô tả bằng âm thanh trên tất cả các ứng dụng. Các ứng dụng Android TV có thể kiểm tra lựa chọn ưu tiên của người dùng bằng cách truy vấn lựa chọn ưu tiên đó bằng 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
}

Các ứng dụng Android TV có thể theo dõi thời điểm lựa chọn ưu tiên của người dùng thay đổi bằng cách thêm một trình nghe vào 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);
}