แนวทางปฏิบัติแนะนำเกี่ยวกับการช่วยเหลือพิเศษสำหรับ Android TV

คู่มือนี้จะแนะนำแนวทางปฏิบัติที่ดีที่สุดสำหรับการช่วยเหลือพิเศษใน Android TV และให้คำแนะนำสำหรับทั้งแอปที่มาพร้อมเครื่องและแอปที่ไม่ได้มาพร้อมเครื่อง

เหตุใดการช่วยเหลือพิเศษจึงสำคัญต่อแอปทีวีของฉัน

ความบกพร่องทางสายตาเป็นเรื่องที่พบได้บ่อยในกลุ่มประชากรที่ดูทีวี ผู้คนทั่วโลกประมาณ 2.2 พันล้านคน มีภาวะสายตาผิดปกติ ตามข้อมูลขององค์การอนามัยโลก (WHO) ในสหรัฐอเมริกา ชาวอเมริกัน 32 ล้านคนที่มีอายุ 18 ปีขึ้นไปเคยมีการสูญเสียการมองเห็นอย่างมาก ตามการสำรวจสัมภาษณ์ด้านสุขภาพแห่งชาติปี 2018 ในยุโรป การประมาณการ ชี้ให้เห็นว่ามีผู้พิการทางสายตาและผู้ที่มีสายตาเลือนราง30 ล้านคน ตามข้อมูลของสหภาพคนตาบอดแห่งยุโรป (EBU)

ที่สำคัญที่สุดคือผู้ใช้ที่มีความบกพร่องทางสายตาสามารถเพลิดเพลินกับเนื้อหาสื่อ ได้มากพอๆ กับผู้ใช้ที่มีสายตาปกติ แบบสำรวจปี 2017 ที่ Comcast ว่าจ้างแสดงให้เห็นว่าผู้ใช้ที่ตาบอดหรือมีสายตาเลือนราง 96% ดูทีวีเป็นประจำ โดย 81% ดูมากกว่า 1 ชั่วโมงต่อวัน อย่างไรก็ตาม 65% ยังรายงานว่า พบปัญหาในการค้นหารายการที่กำลังออกอากาศทางทีวี และในแบบสำรวจปี 2020 ในสหราชอาณาจักร ผู้พิการ 80% กล่าวว่าเคยพบปัญหาด้านการช่วยเหลือพิเศษกับวิดีโอ ในบริการสตรีมมิงแบบออนดีมานด์

แม้ว่าเทคโนโลยีความช่วยเหลือจะช่วยผู้ใช้ที่มีสายตาเลือนรางได้ แต่การสนับสนุนการช่วยเหลือพิเศษในเส้นทางการค้นพบเนื้อหาสำหรับแอปทีวีก็เป็นสิ่งสำคัญ เช่น ให้ความสำคัญกับการให้คำแนะนำในการไปยังส่วนต่างๆ และ การติดป้ายกำกับองค์ประกอบอย่างเหมาะสม รวมถึงตรวจสอบว่าแอปในทีวีทำงานได้ดีกับฟีเจอร์การช่วยเหลือพิเศษ เช่น TalkBack ขั้นตอนเหล่านี้ช่วยปรับปรุงประสบการณ์ของผู้ใช้ที่มีความบกพร่องทางการมองเห็นได้อย่างมาก

ก้าวแรกในการปรับปรุงการช่วยเหลือพิเศษคือการรับรู้ คู่มือนี้จะช่วยให้คุณและทีมค้นพบปัญหาด้านการช่วยเหลือพิเศษในแอปทีวี

แหล่งข้อมูลการช่วยเหลือพิเศษของ Android

ดูข้อมูลเพิ่มเติมเกี่ยวกับการช่วยเหลือพิเศษใน 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

ใน Android 12 ขึ้นไป ผู้ใช้สามารถเปลี่ยนการปรับขนาดข้อความได้จากการตั้งค่าของอุปกรณ์

รูปแบบแป้นพิมพ์

ใน Android 13 (API ระดับ 33) ขึ้นไป คุณสามารถใช้ getKeyCodeForKeyLocation() เพื่อ ค้นหารหัสแป้นสำหรับ ตำแหน่งแป้นที่คาดไว้ การดำเนินการนี้อาจจำเป็นในกรณีที่ผู้ใช้ได้แมปตำแหน่งคีย์บางตำแหน่งใหม่ หรือหากผู้ใช้ใช้แป้นพิมพ์ที่มีเลย์เอาต์ไม่ปกติ

เสียงบรรยาย

ใน Android 13 (API ระดับ 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 สามารถตรวจสอบได้เมื่อค่ากำหนดของผู้ใช้เปลี่ยนแปลงโดย เพิ่ม Listener ไปยัง 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);
}