อุปกรณ์ทีวีต้องใช้อุปกรณ์ฮาร์ดแวร์รองเพื่อโต้ตอบกับแอป ซึ่งอาจเป็นรีโมตคอนโทรลพื้นฐาน หรือเกมคอนโทรลเลอร์ ดังนั้น แอปของคุณจึงต้องรองรับการป้อนข้อมูลด้วยแป้นควบคุมทิศทาง (D-pad) นอกจากนี้ แอปของคุณอาจต้องจัดการเมื่อคอนโทรลเลอร์ออฟไลน์และการป้อนข้อมูลจากคอนโทรลเลอร์มากกว่า 1 ประเภท
คู่มือนี้จะกล่าวถึงข้อกำหนดในการจัดการคอนโทรลเลอร์สำหรับอุปกรณ์ทีวี
การควบคุมขั้นต่ำด้วย 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 รูปแบบต่างๆ เพื่อให้ผู้ใช้ไม่ ต้องเปลี่ยนคอนโทรลเลอร์เพื่อใช้งานแอป ดูข้อมูลเพิ่มเติมเกี่ยวกับการจัดการการป้อนข้อมูล รูปแบบต่างๆ ได้ที่ ประมวลผลการป้อนข้อมูลด้วยแป้นควบคุมทิศทาง
จัดการเหตุการณ์ของปุ่ม
เมื่อผู้ใช้คลิกปุ่มในคอนโทรลเลอร์ แอปของคุณจะได้รับเหตุการณ์ที่มี 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() | Google 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() | หยุด |
หมายเหตุ: เมื่อใช้ MediaSession อย่าลบล้างการจัดการปุ่มเฉพาะสื่อ เช่น KEYCODE_MEDIA_PLAY หรือ KEYCODE_MEDIA_PAUSE
ระบบจะทริกเกอร์เมธอดที่เหมาะสม
MediaSession.Callback
โดยอัตโนมัติ
กำหนดลักษณะการทำงานที่เหมาะสมให้กับปุ่มย้อนกลับ
ปุ่มย้อนกลับต้องไม่ทำหน้าที่เป็นปุ่มสลับ เช่น อย่าใช้ปุ่มนี้เพื่อเปิดและปิดเมนู ให้ใช้ปุ่มนี้เพื่อนำทางย้อนกลับผ่านหน้าจอก่อนหน้าที่ผู้เล่น เคยเข้าชมเท่านั้น
เนื่องจากปุ่มย้อนกลับจะนำทางย้อนกลับแบบเส้นตรงเท่านั้น คุณจึงใช้ ปุ่มนี้เพื่อออกจากเมนูในแอปที่เปิดโดยปุ่มอื่นและกลับไปที่แอปได้ การกดปุ่มย้อนกลับติดต่อกันจะต้องนำไปสู่หน้าจอหลักของ 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®