คู่มือนี้มีแนวทางปฏิบัติแนะนำสำหรับการช่วยเหลือพิเศษใน Android TV และให้คำแนะนำสำหรับทั้งแอปเนทีฟและแอปที่ไม่ใช่แอปเนทีฟ
เหตุใดแอป TV ของฉันจึงมีความสามารถเข้าถึงได้ง่ายจึงมีความสำคัญ
ความบกพร่องทางการมองเห็นเป็นเรื่องที่พบได้ไม่น้อยในหมู่ผู้ชมทีวี WHO ประมาณการว่ามีผู้คน 2.2 พันล้านคนทั่วโลกที่มีความบกพร่องทางการมองเห็น ขณะที่ผู้ใหญ่ในสหรัฐอเมริกาประมาณ 32 ล้านคน ประสบปัญหาการมองเห็นบกพร่องอย่างมาก (National Health Interview Survey ปี 2018) ในยุโรป EBU ประมาณการว่ามีผู้ได้รับผลกระทบ 30 ล้านคน
ผู้ใช้ที่มีความบกพร่องทางการมองเห็นชื่นชอบสื่อต่างๆ ไม่ต่างจากเพื่อนที่มีสายตาปกติ การสำรวจของ Comcast ในปี 2017 พบว่า 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);
}