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

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

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

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

ผู้ใช้ที่มีความบกพร่องทางสายตาสามารถเพลิดเพลินกับสื่อได้มากเท่ากับเพื่อนร่วมงานที่มีสายตาปกติ แบบสำรวจปี 2017 ของ Comcast พบว่า 96% ดูทีวี (81% ดูนานกว่า 1 ชั่วโมงต่อวัน) แต่ 65% รายงานปัญหา เกี่ยวกับการค้นหาเนื้อหา นอกจากนี้ ผู้พิการ 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()

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