จัดการตัวควบคุมทีวี

อุปกรณ์ทีวีต้องใช้อุปกรณ์ฮาร์ดแวร์รองเพื่อโต้ตอบกับแอป ซึ่งอาจเป็นรีโมตคอนโทรลพื้นฐาน หรือเกมคอนโทรลเลอร์ ดังนั้น แอปของคุณจึงต้องรองรับการป้อนข้อมูลด้วยแป้นควบคุมทิศทาง (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_R1skipToNext()ข้ามไปรายการถัดไป
BUTTON_L1skipToPrevious()ข้ามไปรายการก่อนหน้า
DPAD_RIGHT, BUTTON_R2, AXIS_RTRIGGER, AXIS_THROTTLEfastForward()กรอไปข้างหน้า
DPAD_LEFT, BUTTON_L2, AXIS_LTRIGGER, AXIS_BRAKErewind()กรอกลับ
ไม่มี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®

รูปที่ 1 ตัวอย่างวิธีการใช้คอนโทรลเลอร์โดยใช้เทมเพลตเกมแพด Android TV