อุปกรณ์ทีวีต้องใช้อุปกรณ์ฮาร์ดแวร์รองเพื่อโต้ตอบกับแอป ซึ่งอาจเป็นรีโมตคอนโทรลพื้นฐาน รีโมตพอยน์เตอร์ หรือเกมคอนโทรลเลอร์ แอปของคุณต้องรองรับการป้อนข้อมูลจากปุ่มควบคุมทิศทาง (D-pad) จัดการเมื่อคอนโทรลเลอร์ออฟไลน์ และรองรับการป้อนข้อมูลจาก คอนโทรลเลอร์หลายประเภท รวมถึงรีโมตที่มีเคอร์เซอร์ เพื่อมอบประสบการณ์การใช้งานที่สอดคล้องกัน
การควบคุมขั้นต่ำของ D-pad
ตัวควบคุมเริ่มต้นสำหรับอุปกรณ์ทีวีคือ D-pad โดยทั่วไปแล้ว แอปของคุณต้อง ใช้งานได้จากรีโมตคอนโทรลที่มีปุ่มขึ้น ลง ซ้าย ขวา เลือก ย้อนกลับ และหน้าแรกเท่านั้น หากแอปของคุณเป็นเกมที่โดยปกติแล้วต้องใช้เกม คอนโทรลเลอร์ที่มีการควบคุมเพิ่มเติม ให้พยายามรองรับการเล่นเกมด้วยการควบคุม D-pad เหล่านี้เท่านั้น มิฉะนั้น ให้เตือนผู้ใช้ว่าต้องใช้คอนโทรลเลอร์และให้ผู้ใช้ออกจากเกมอย่างราบรื่นโดยใช้คอนโทรลเลอร์ D-pad
ดูข้อมูลเพิ่มเติมเกี่ยวกับการไปยังส่วนต่างๆ ด้วยตัวควบคุม D-pad สำหรับอุปกรณ์ทีวีได้ที่ การไปยังส่วนต่างๆ ของทีวี
จัดการการยกเลิกการเชื่อมต่อตัวควบคุม
โดยทั่วไปแล้ว คอนโทรลเลอร์สำหรับทีวีมักเป็นอุปกรณ์บลูทูธ ซึ่งอาจพยายามประหยัดพลังงานด้วยการเข้าสู่โหมดสลีปเป็นระยะๆ และยกเลิกการเชื่อมต่อจากอุปกรณ์ทีวี ซึ่งหมายความว่าแอปอาจถูกขัดจังหวะหรือรีสตาร์ทหากไม่ได้ กำหนดค่าให้จัดการเหตุการณ์การเชื่อมต่อใหม่เหล่านี้ เหตุการณ์เหล่านี้อาจเกิดขึ้นได้ในกรณีต่อไปนี้
- ขณะเล่นวิดีโอที่มีความยาวหลายนาที แป้น D-pad หรือเกมคอนโทรลเลอร์อาจเข้าสู่โหมดสลีป ยกเลิกการเชื่อมต่อจากอุปกรณ์ทีวี และเชื่อมต่ออีกครั้งในภายหลัง
- ในระหว่างการเล่นเกม ผู้เล่นใหม่สามารถเข้าร่วมเกมได้โดยใช้เกมคอนโทรลเลอร์ ที่ยังไม่ได้เชื่อมต่อ
- ในระหว่างการเล่นเกม ผู้เล่นอาจออกจากเกมและยกเลิกการเชื่อมต่อเกม คอนโทรลเลอร์
กิจกรรมในแอป TV ที่ต้องยกเลิกการเชื่อมต่อและเชื่อมต่อใหม่ต้องได้รับการกำหนดค่าให้จัดการเหตุการณ์การเชื่อมต่อใหม่ในไฟล์ Manifest ของแอป ตัวอย่างโค้ดต่อไปนี้แสดงวิธีเปิดใช้กิจกรรมเพื่อจัดการการเปลี่ยนแปลงการกำหนดค่า รวมถึงการเชื่อมต่อ ยกเลิกการเชื่อมต่อ หรือ เชื่อมต่ออุปกรณ์นำทางหรือคีย์บอร์ดอีกครั้ง
<activity
android:name="com.example.android.TvActivity"
android:label="@string/app_name"
android:configChanges="keyboard|keyboardHidden|navigation"
android:theme="@style/Theme.Leanback">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LEANBACK_LAUNCHER" />
</intent-filter>
...
</activity>
การเปลี่ยนแปลงการกำหนดค่านี้ช่วยให้แอปทำงานต่อไปได้ผ่านเหตุการณ์การเชื่อมต่ออีกครั้ง แทนที่จะให้เฟรมเวิร์ก Android รีสตาร์ท ซึ่งไม่ ใช่ประสบการณ์การใช้งานที่ดีสำหรับผู้ใช้
จัดการรูปแบบอินพุตของ D-pad
ผู้ใช้อุปกรณ์ทีวีอาจมีตัวควบคุมมากกว่า 1 ประเภทที่ใช้กับทีวี เช่น ผู้ใช้อาจมีตัวควบคุม D-pad พื้นฐาน รีโมตพอยน์เตอร์ หรือตัวควบคุมเกม รหัสแป้นที่เกมคอนโทรลเลอร์ระบุเมื่อใช้สำหรับฟังก์ชัน D-pad อาจแตกต่างจากรหัสแป้นที่ D-pad พื้นฐานส่ง
จัดการรูปแบบต่างๆ ของอินพุต D-pad เพื่อให้ผู้ใช้ไม่ต้องเปลี่ยน ตัวควบคุมเพื่อใช้งานแอปของคุณ ดูข้อมูลเพิ่มเติมเกี่ยวกับการจัดการรูปแบบ อินพุตได้ที่ประมวลผลอินพุตแป้นควบคุมทิศทาง
รองรับรีโมตพอยน์เตอร์
อุปกรณ์ทีวีบางรุ่นรองรับรีโมตแบบพอยน์เตอร์ เช่น เมาส์ไร้สายหรือรีโมตที่มี แผงควบคุมทิศทางแบบไวต่อการสัมผัส (แทร็กแพด) การรองรับรีโมตแบบพอยน์เตอร์ช่วยให้ผู้ใช้โต้ตอบกับแอปของคุณได้โดยใช้ท่าทางสัมผัสแบบชี้แล้วคลิก วางเมาส์ ปัด และลาก ซึ่งจะมอบประสบการณ์การใช้งานที่ราบรื่นยิ่งขึ้นในฮาร์ดแวร์ที่เข้ากันได้ พร้อมทั้งยังคงความเข้ากันได้กับ D-pad อย่างเต็มรูปแบบ
ประกาศการรองรับรีโมตเคอร์เซอร์ในไฟล์ Manifest
หากต้องการระบุว่าแอปของคุณนำทางได้ด้วยอินพุตของเคอร์เซอร์และอินพุตแบบสัมผัส ให้กำหนดค่า
ไฟล์ Manifest ของแอปด้วยข้อมูลเมตา android.software.leanback.supports_touch
ที่ตั้งค่าเป็น true
<manifest ...>
<!-- Signal whether the app is adaptive or built just for TV -->
<uses-feature
android:name="android.software.leanback"
android:required="true|false" />
<!-- Ensure the app can be installed on conventional TVs -->
<uses-feature
android:name="android.hardware.touchscreen"
android:required="false" />
<!-- Signal whether the app supports pointer remotes -->
<meta-data
android:name="android.software.leanback.supports_touch"
android:value="true" />
<application ...>
...
</application>
</manifest>
รองรับการโต้ตอบด้วยการคลิก การวางเมาส์เหนือ และการเลื่อน
เมื่อรองรับรีโมตแบบพอยน์เตอร์ โปรดตรวจสอบว่าคอมโพเนนต์ UI ตอบสนอง ต่อเคอร์เซอร์และการป้อนข้อมูลด้วยการสัมผัสอย่างเหมาะสมในการโต้ตอบต่อไปนี้
- การคลิกและการเลือก: องค์ประกอบ UI ทั้งหมดที่โฟกัสและเลือกได้ต้อง
คลิกได้ด้วยรีโมตเคอร์เซอร์ ซึ่งตรงกับลักษณะการทำงานของการเลือกด้วย D-pad
(
KEYCODE_DPAD_CENTER)- Jetpack Compose: ใช้ตัวปรับแต่ง
Modifier.clickable()หรือpointerInputดูรายละเอียดเพิ่มเติมได้ที่แตะค้าง - Views: จัดการเหตุการณ์คลิกใน Views ดูรายละเอียดเพิ่มเติมได้ที่ภาพรวมของเหตุการณ์อินพุต
- Jetpack Compose: ใช้ตัวปรับแต่ง
- สถานะการวางเมาส์เหนือภาพ: แสดงเอฟเฟกต์การวางเมาส์เหนือภาพอย่างชัดเจนเพื่อระบุ
เมื่อวางเคอร์เซอร์ตัวชี้เหนือรายการที่เลือกได้
- Jetpack Compose: ใช้
Modifier.hoverable()หรือสังเกตสถานะการวางเมาส์ โดยใช้InteractionSourceดูรายละเอียดเพิ่มเติมได้ที่จัดการการโต้ตอบของผู้ใช้ - มุมมอง: กำหนดสถานะการวางเมาส์โดยใช้ state-list drawables ด้วย
android:state_hovered="true"
- Jetpack Compose: ใช้
- การเลื่อนด้วยการปัดและดีด: การเลื่อนในแนวนอนและแนวตั้งที่ทริกเกอร์ ด้วยท่าทางการปัดหรือดีดบนปุ่ม D-pad ตรงกลางที่ไวต่อการสัมผัสต้อง ทำงานได้อย่างราบรื่นในเนื้อหาที่เลื่อนได้ทั้งหมด
- การเลื่อนด้วยการลาก: ผู้ใช้ต้องลากเพื่อเลื่อนในแนวตั้ง (ขึ้นและลง) หรือแนวนอน (ซ้ายและขวา) ในคอนเทนเนอร์ที่เลื่อนได้
- Jetpack Compose: คอนเทนเนอร์ที่เลื่อนได้มาตรฐานรองรับการเลื่อนด้วยเคอร์เซอร์และ การเลื่อนด้วยการแตะโดยค่าเริ่มต้น สำหรับการใช้งานที่กำหนดเอง โปรดดู การป้อนข้อมูลด้วยเคอร์เซอร์ใน Compose
- มุมมอง: มุมมองที่เลื่อนได้มาตรฐานรองรับการเลื่อนด้วยการสัมผัสโดยค่าเริ่มต้น ดูการจัดการอินพุตที่กำหนดเองได้ที่การสัมผัสและการป้อนข้อมูล
- การกรอการเล่นสื่อ: ระหว่างการเล่นสื่อ (เช่น รายการทีวีและภาพยนตร์) ผู้ใช้ต้องโต้ตอบกับแถบแสดงความคืบหน้าของการเล่น (แถบเลื่อน) ได้โดยการชี้และคลิกเพื่อไปยังการประทับเวลาในอดีตหรืออนาคต รวมถึงการลาก (การกรอ) ไปตามแถบแสดงความคืบหน้าเพื่อไปยังเวลาที่ต้องการ
จัดการเหตุการณ์ของปุ่ม
เมื่อผู้ใช้คลิกปุ่มบนตัวควบคุม แอปจะได้รับเหตุการณ์ที่มี
KeyEvent ลักษณะการทำงานที่ต้องการของปุ่มอาจเป็นเหตุการณ์สื่อ
เช่น เล่น หยุดชั่วคราว หรือหยุด หรืออาจเป็นเหตุการณ์ประเภททีวี เช่น การเลือกหรือ
การนำทาง กำหนดลักษณะการทำงานที่สอดคล้องกันให้กับปุ่มของ
คอนโทรลเลอร์เพื่อให้ผู้ใช้ได้รับประสบการณ์การใช้งานที่ดี
เหตุการณ์ UI ของทีวี
กำหนดลักษณะการทำงานของ UI ของทีวีให้กับปุ่มที่สร้างประเภท KeyEvent ตามที่แสดงในตารางต่อไปนี้
KeyEvent |
ลักษณะการทำงาน |
|---|---|
KEYCODE_BUTTON_B, KEYCODE_BACK |
กลับ |
KEYCODE_BUTTON_SELECT, KEYCODE_BUTTON_A, KEYCODE_ENTER, KEYCODE_DPAD_CENTER, KEYCODE_NUMPAD_ENTER |
การเลือก |
KEYCODE_DPAD_UP, KEYCODE_DPAD_DOWN, KEYCODE_DPAD_LEFT, KEYCODE_DPAD_RIGHT |
การนำทาง |
เหตุการณ์สื่อ
เมื่อผู้ใช้ดูสื่อ ให้กำหนดลักษณะการทำงานให้กับปุ่มที่สร้างประเภท KeyEvent ตามที่แสดงในตารางต่อไปนี้ หากแอปควบคุม MediaSession ให้ใช้ MediaControllerAdapter เพื่อเรียกใช้เมธอด MediaControllerCompat.TransportControls อย่างใดอย่างหนึ่งที่แสดงในตาราง โปรดทราบว่า
ปุ่มเลือกจะทำหน้าที่เป็นปุ่มเล่นหรือหยุดชั่วคราวในบริบทนี้
KeyEvent |
การเรียกใช้ TransportControls | ลักษณะการทำงาน |
|---|---|---|
BUTTON_SELECT, BUTTON_A, ENTER, DPAD_CENTER, KEYCODE_NUMPAD_ENTER |
play() |
เล่น |
BUTTON_START, BUTTON_SELECT, BUTTON_A, ENTER, DPAD_CENTER, KEYCODE_NUMPAD_ENTER |
pause() |
หยุดชั่วคราว |
BUTTON_R1 |
skipToNext() |
ข้ามไปรายการถัดไป |
BUTTON_L1 |
skipToPrevious() |
ข้ามไปรายการก่อนหน้า |
DPAD_RIGHT, BUTTON_R2, AXIS_RTRIGGER, AXIS_THROTTLE |
fastForward() |
กรอไปข้างหน้า |
DPAD_LEFT, BUTTON_L2, AXIS_LTRIGGER, AXIS_BRAKE |
rewind() |
กรอกลับ |
| ไม่มี | stop() |
หยุด |
กำหนดลักษณะการทำงานของปุ่มย้อนกลับที่เหมาะสม
ปุ่มย้อนกลับต้องไม่ทำหน้าที่เป็นปุ่มเปิด/ปิด เช่น อย่าใช้เพื่อทั้ง เปิดและปิดเมนู ใช้เพื่อไปยังหน้าจอก่อนหน้าในลักษณะ Breadcrumb ผ่านหน้าจอก่อนหน้าที่เพลเยอร์เคยแสดงเท่านั้น
เนื่องจากปุ่มย้อนกลับจะดำเนินการย้อนกลับแบบเชิงเส้นเท่านั้น คุณจึงใช้ปุ่มนี้ เพื่อออกจากเมนูในแอปที่เปิดด้วยปุ่มอื่นและกลับไปยังแอปได้ การกดปุ่มย้อนกลับอย่างต่อเนื่องจะต้องนำไปสู่ หน้าจอหลักของ Android TV เสมอ เช่น การเล่นเกม > หน้าจอหยุดเกมชั่วคราว > หน้าจอหลักของเกม > หน้าจอหลักของ Android TV หรือการเล่นรายการทีวี > หน้าจอหลักของแอปทีวี
หน้าจอหลักของ Android TV
ดูข้อมูลเพิ่มเติมเกี่ยวกับการออกแบบสำหรับการนำทางได้ที่ การออกแบบการนำทางย้อนกลับและขึ้น ดูข้อมูลเกี่ยวกับการติดตั้งใช้งานได้ที่การให้การนำทางย้อนกลับที่เหมาะสม
จัดการคอนโทรลเลอร์สำหรับเกม
เมื่อสร้างเกมสำหรับ Android TV ให้ออกแบบรูปแบบการควบคุมให้ทำงานได้กับทั้งรีโมตทีวีมาตรฐานและเกมคอนโทรลเลอร์โดยเฉพาะ
รองรับการควบคุม D-pad
วางแผนรูปแบบการควบคุมโดยใช้การควบคุม D-pad เนื่องจากชุดควบคุมนี้เป็น ค่าเริ่มต้นสำหรับอุปกรณ์ Android TV ผู้เล่นต้องใช้ D-pad ได้สำหรับ ทุกแง่มุมของเกม ไม่ใช่แค่การควบคุมการเล่นเกมหลักเท่านั้น แต่ยังรวมถึง การไปยังส่วนต่างๆ ของเมนูและโฆษณาด้วย ด้วยเหตุนี้ คุณจึงควรตรวจสอบว่าเกม Android TV ไม่ได้อ้างอิงถึงอินเทอร์เฟซแบบสัมผัสด้วยภาษาอย่าง "แตะที่นี่เพื่อดำเนินการต่อ"
วิธีที่คุณกำหนดการโต้ตอบของผู้เล่นกับคอนโทรลเลอร์อาจเป็นกุญแจสำคัญในการ มอบประสบการณ์การใช้งานที่ยอดเยี่ยม ลองทำตามแนวทางปฏิบัติแนะนำเหล่านี้เลย
- แจ้งข้อกำหนดของเกมแพดล่วงหน้า: ใช้คำอธิบายใน Google Play เพื่อแจ้งให้ผู้เล่นทราบถึงความคาดหวังเกี่ยวกับ เกมแพด หากเกมเหมาะกับเกมแพดที่มีจอยสติ๊กมากกว่า เกมแพดที่มีเฉพาะ D-pad ให้ระบุอย่างชัดเจน ผู้เล่นที่ใช้คอนโทรลเลอร์ที่ไม่เหมาะสมกับเกมอาจได้รับประสบการณ์การใช้งานที่ไม่ดีและให้คะแนนเกมของคุณในระดับต่ำ
- ใช้การแมปปุ่มที่สอดคล้องกัน: การแมปปุ่มที่ใช้งานง่ายเป็นกุญแจสำคัญในการมอบประสบการณ์การใช้งานที่ดี ให้แก่ผู้ใช้ เช่น ปฏิบัติตามธรรมเนียมที่ยอมรับโดยใช้ปุ่ม A เพื่อยอมรับและปุ่ม B เพื่อยกเลิก นอกจากนี้ คุณยังมอบความยืดหยุ่นได้ด้วยการอนุญาตให้ผู้ใช้กำหนดปุ่มใหม่ ดูข้อมูลเพิ่มเติม เกี่ยวกับการแมปปุ่มได้ที่จัดการการทำงานของคอนโทรลเลอร์
- ตรวจหาความสามารถของอุปกรณ์ควบคุมและปรับตามนั้น: สอบถามอุปกรณ์ควบคุมเกี่ยวกับความสามารถของอุปกรณ์เพื่อเพิ่มประสิทธิภาพการจับคู่ระหว่างอุปกรณ์ควบคุม กับเกม เช่น คุณอาจต้องการให้ผู้เล่นบังคับวัตถุโดย โบกคอนโทรลเลอร์กลางอากาศ แต่หากคอนโทรลเลอร์ของผู้เล่นไม่มี ฮาร์ดแวร์มาตรความเร่งและไจโรสโคป การโบกก็ใช้ไม่ได้ ส่งคำค้นหาไปยัง คอนโทรลเลอร์ และหากไม่รองรับการตรวจจับการเคลื่อนไหว ให้เปลี่ยนไปใช้ รูปแบบการควบคุมอื่นที่ใช้ได้ ดูข้อมูลเพิ่มเติมเกี่ยวกับการค้นหาความสามารถของ คอนโทรลเลอร์ได้ที่ รองรับคอนโทรลเลอร์ใน Android เวอร์ชันต่างๆ
ใช้ปุ่มที่เหมาะสม
ตัวควบคุมเกมบางรุ่นไม่มีปุ่มเริ่ม ค้นหา หรือเมนู ตรวจสอบว่า UI ของคุณไม่ได้ขึ้นอยู่กับการใช้ปุ่มเหล่านี้
จัดการคอนโทรลเลอร์หลายตัว
เมื่อผู้เล่นหลายคนเล่นเกมโดยใช้คอนโทรลเลอร์ของตนเอง
คุณต้องจับคู่ผู้เล่นกับคอนโทรลเลอร์แต่ละอัน ดูข้อมูลเกี่ยวกับวิธี
ใช้การระบุหมายเลขของคอนโทรลเลอร์ได้ที่ getControllerNumber()
จัดการการยกเลิกการเชื่อมต่อตัวควบคุม
เมื่อตัวควบคุมถูกตัดการเชื่อมต่อกลางเกม ให้หยุดเกมชั่วคราวและ แสดงกล่องโต้ตอบที่แจ้งให้ผู้เล่นที่ถูกตัดการเชื่อมต่อเชื่อมต่อตัวควบคุมอีกครั้ง
นอกจากนี้ ให้เสนอเคล็ดลับการแก้ปัญหาในกล่องโต้ตอบด้วย เช่น บอกให้เพลเยอร์ "ตรวจสอบการเชื่อมต่อบลูทูธ" ดูข้อมูลเพิ่มเติมเกี่ยวกับการรองรับอุปกรณ์อินพุตได้ที่จัดการการทำงานของคอนโทรลเลอร์และภาพรวมของบลูทูธ
แสดงวิธีการใช้คอนโทรลเลอร์
หากเกมมีวิธีการควบคุมเกมแบบภาพ ให้ใช้รูปภาพตัวควบคุมที่ไม่มีการแสดงแบรนด์และมีเฉพาะปุ่มที่ใช้ได้กับ Android
หากต้องการดูภาพตัวอย่างของคอนโทรลเลอร์ที่ใช้ได้กับ Android ให้ดาวน์โหลดเทมเพลตเกมแพดของ Android TV (ZIP) โดยมีคอนโทรลเลอร์สีขาวบนพื้นหลังสีดำและคอนโทรลเลอร์สีดำบนพื้นหลังสีขาว ซึ่งแสดงในรูปที่ 1 เป็นไฟล์ PNG และเป็นไฟล์ Adobe® Illustrator®