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

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

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

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

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

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

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

แหล่งข้อมูลการช่วยเหลือพิเศษของ 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()

KotlinJava
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 สามารถตรวจสอบได้เมื่อค่ากำหนดของผู้ใช้เปลี่ยนไป การเพิ่ม Listener ไปยัง AccessibilityManager

KotlinJava
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);
}