อุปกรณ์ทีวีต้องใช้อุปกรณ์ฮาร์ดแวร์รองเพื่อโต้ตอบกับแอป เช่น รีโมตคอนโทรลพื้นฐาน รีโมตแบบชี้ หรือเกมคอนโทรลเลอร์ แอปของคุณต้องรองรับอินพุตจากปุ่มบังคับทิศทาง (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
<property> เป็น true ภายในองค์ประกอบ <application> (หรือภายในองค์ประกอบ <activity> แต่ละรายการเพื่อกำหนดค่าการรองรับต่อกิจกรรม) ดังนี้
<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" />
<application ...>
<!-- Signal whether the app supports pointer remotes -->
<property
android:name="android.software.leanback.supports_touch"
android:value="true" />
...
</application>
</manifest>
รองรับการโต้ตอบด้วยการคลิก การวางเมาส์เหนือ และการเลื่อน
เมื่อรองรับรีโมตแบบชี้ ให้ตรวจสอบว่าคอมโพเนนต์ UI ตอบสนองต่อเคอร์เซอร์และการป้อนข้อมูลด้วยการสัมผัสอย่างเหมาะสมในการโต้ตอบต่อไปนี้
- การคลิกและการเลือก: องค์ประกอบ UI ทั้งหมดที่โฟกัสและเลือกได้ต้องคลิกได้ด้วยรีโมตแบบชี้ ซึ่งตรงกับลักษณะการทำงานของการเลือกด้วยปุ่มบังคับทิศทาง (
KEYCODE_DPAD_CENTER)- Jetpack Compose: ใช้ตัวปรับแต่ง
Modifier.clickable()หรือpointerInputดูรายละเอียดเพิ่มเติมได้ที่แตะและกด - Views: จัดการกิจกรรมการคลิกในมุมมอง ดูรายละเอียดเพิ่มเติมได้ที่ภาพรวมเหตุการณ์การป้อนข้อมูล
- Jetpack Compose: ใช้ตัวปรับแต่ง
- สถานะการวางเมาส์เหนือองค์ประกอบ: แสดงเอฟเฟกต์การวางเมาส์เหนือองค์ประกอบอย่างชัดเจนเพื่อระบุว่าเคอร์เซอร์ตัวชี้อยู่เหนือรายการที่เลือกได้
- Jetpack Compose: ใช้
Modifier.hoverable()หรือสังเกตสถานะการวางเมาส์เหนือโดยใช้InteractionSourceดูรายละเอียดเพิ่มเติมได้ที่จัดการการโต้ตอบของผู้ใช้ - Views: กำหนดสถานะการวางเมาส์เหนือโดยใช้สถานะรายการที่วาดได้ด้วย
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() |
หยุด |
ระบุลักษณะการทำงานของปุ่มย้อนกลับที่เหมาะสม
ปุ่มย้อนกลับต้องไม่ทำหน้าที่เป็นปุ่มเปิด/ปิด เช่น อย่าใช้เพื่อทั้งเปิดและปิดเมนู ใช้เพื่อย้อนกลับไปยังหน้าจอก่อนหน้าที่ผู้เล่นเคยอยู่เท่านั้น
เนื่องจากปุ่มย้อนกลับจะไปยังส่วนต่างๆ แบบเส้นตรงและย้อนกลับเท่านั้น คุณจึงใช้ปุ่มนี้เพื่อออกจากเมนูในแอปที่เปิดโดยปุ่มอื่นและกลับไปที่แอปได้ การกดปุ่มย้อนกลับติดต่อกันจะต้องนำไปสู่หน้าจอหลักของ Android TV เสมอ เช่น การเล่นเกม > หน้าจอหยุดเกมชั่วคราว > หน้าจอหลักของเกม > หน้าจอหลักของ Android TV หรือการเล่นรายการทีวี > หน้าจอหลักของแอป TV
หน้าจอหลักของ Android TV
ดูข้อมูลเพิ่มเติมเกี่ยวกับการออกแบบสำหรับการนำทางได้ที่การออกแบบการนำทางย้อนกลับและขึ้น ดูข้อมูลเกี่ยวกับการติดตั้งใช้งานได้ที่การนำทางย้อนกลับที่เหมาะสม
จัดการคอนโทรลเลอร์สำหรับเกม
เมื่อสร้างเกมสำหรับ Android TV ให้ออกแบบรูปแบบการควบคุมให้ทำงานได้ทั้งกับรีโมตทีวีมาตรฐานและเกมคอนโทรลเลอร์เฉพาะ
รองรับการควบคุมด้วย D-pad
วางแผนรูปแบบการควบคุมโดยใช้การควบคุมด้วยปุ่มบังคับทิศทาง (D-pad) เนื่องจากชุดการควบคุมนี้เป็นค่าเริ่มต้นสำหรับอุปกรณ์ Android TV ผู้เล่นต้องใช้ D-pad ได้ในทุกแง่มุมของเกม ไม่เพียงแต่ควบคุมเกมเพลย์หลักเท่านั้น แต่ยังรวมถึงการไปยังส่วนต่างๆ ของเมนูและโฆษณาด้วย ด้วยเหตุนี้ โปรดตรวจสอบว่าเกม Android TV ของคุณไม่ได้อ้างอิงถึงอินเทอร์เฟซแบบสัมผัสด้วยภาษา เช่น "แตะที่นี่เพื่อดำเนินการต่อ"
วิธีที่คุณกำหนดรูปแบบการโต้ตอบของผู้เล่นกับคอนโทรลเลอร์อาจเป็นกุญแจสำคัญในการมอบประสบการณ์ที่ยอดเยี่ยมแก่ผู้ใช้ ลองทำตามแนวทางปฏิบัติแนะนำเหล่านี้เลย
- แจ้งข้อกำหนดเกี่ยวกับคอนโทรลเลอร์ล่วงหน้า: ใช้คำอธิบายใน Google Play เพื่อแจ้งให้ผู้เล่นทราบถึงสิ่งที่คาดหวังเกี่ยวกับคอนโทรลเลอร์ หากเกมเหมาะกับเกมแพดที่มีจอยสติ๊กมากกว่าเกมแพดที่มีเฉพาะ D-pad ให้ระบุข้อมูลนี้ให้ชัดเจน ผู้เล่นที่ใช้คอนโทรลเลอร์ที่ไม่เหมาะกับเกมอาจได้รับประสบการณ์ที่ไม่ดีและให้คะแนนเกมของคุณต่ำ
- ใช้การแมปปุ่มที่สอดคล้องกัน: การแมปปุ่มที่ใช้งานง่ายเป็นกุญแจสำคัญในการมอบประสบการณ์ที่ดีแก่ผู้ใช้ เช่น ปฏิบัติตามธรรมเนียมที่ยอมรับโดยใช้ปุ่ม A เพื่อยอมรับและปุ่ม B เพื่อยกเลิก นอกจากนี้ คุณยังเพิ่มความยืดหยุ่นได้โดยอนุญาตให้ผู้ใช้แมปปุ่มใหม่ได้ ดูข้อมูลเพิ่มเติมเกี่ยวกับการแมปปุ่มได้ที่จัดการการดำเนินการของตัวควบคุม
- ตรวจหาความสามารถของตัวควบคุมและปรับตามความเหมาะสม: ค้นหาข้อมูลเกี่ยวกับความสามารถของตัวควบคุมเพื่อเพิ่มประสิทธิภาพการจับคู่ระหว่างตัวควบคุมกับเกม ตัวอย่างเช่น คุณอาจตั้งใจให้ผู้เล่นบังคับวัตถุด้วยการโบกคอนโทรลเลอร์ในอากาศ แต่หากคอนโทรลเลอร์ของผู้เล่นไม่มีฮาร์ดแวร์ตัวตรวจวัดความเร่งและเครื่องวัดการหมุน การโบกก็จะไม่ทำงาน ค้นหาตัวควบคุม และหากไม่รองรับการตรวจจับการเคลื่อนไหว ให้เปลี่ยนไปใช้รูปแบบการควบคุมอื่นที่พร้อมใช้งาน ดูข้อมูลเพิ่มเติมเกี่ยวกับการค้นหาความสามารถของตัวควบคุมได้ที่รองรับตัวควบคุมใน Android เวอร์ชันต่างๆ
ใช้ปุ่มที่เหมาะสม
เกมคอนโทรลเลอร์บางรุ่นไม่มีปุ่ม Start, Search หรือ Menu ตรวจสอบว่า UI ของคุณไม่ได้ขึ้นอยู่กับการใช้ปุ่มเหล่านี้
จัดการคอนโทรลเลอร์หลายตัว
เมื่อผู้เล่นหลายคนเล่นเกมโดยแต่ละคนมีคอนโทรลเลอร์ของตนเอง สิ่งสำคัญคือต้องจับคู่ผู้เล่นกับคอนโทรลเลอร์แต่ละคู่ ดูข้อมูลเกี่ยวกับวิธีใช้การระบุหมายเลขตัวควบคุมได้ที่ getControllerNumber()
จัดการการยกเลิกการเชื่อมต่อตัวควบคุม
เมื่อตัวควบคุมถูกตัดการเชื่อมต่อระหว่างการเล่นเกม ให้หยุดเกมชั่วคราวและแสดงกล่องโต้ตอบที่แจ้งให้ผู้เล่นที่ถูกตัดการเชื่อมต่อเชื่อมต่อตัวควบคุมอีกครั้ง
รวมถึงให้เคล็ดลับการแก้ปัญหาในกล่องโต้ตอบด้วย เช่น บอกให้ผู้เล่น "ตรวจสอบการเชื่อมต่อบลูทูธ" ดูข้อมูลเพิ่มเติมเกี่ยวกับการใช้การรองรับอุปกรณ์อินพุตได้ที่จัดการการทำงานของตัวควบคุมและภาพรวมของบลูทูธ
แสดงวิธีการใช้ตัวควบคุม
หากเกมของคุณมีวิธีการควบคุมเกมแบบภาพ ให้ใช้รูปภาพตัวควบคุมที่ไม่มีการแสดงแบรนด์และมีเฉพาะปุ่มที่เข้ากันได้กับ Android
หากต้องการดูรูปภาพตัวอย่างของคอนโทรลเลอร์ที่เข้ากันได้กับ Android ให้ดาวน์โหลดเทมเพลตเกมแพด Android TV (ZIP) ซึ่งประกอบด้วยตัวควบคุมสีขาวบนพื้นหลังสีดำและตัวควบคุมสีดำบนพื้นหลังสีขาว (ดังที่แสดงในรูปที่ 1) ในรูปแบบไฟล์ PNG และไฟล์ Adobe® Illustrator®