TV 裝置需要次要硬體裝置才能與應用程式互動,例如基本的遙控器或遊戲控制器。因此,您的應用程式必須支援方向鍵 (D-Pad) 輸入。 此外,應用程式可能需要處理離線的控制器,以及來自多種控制器的輸入內容。
本指南討論處理電視裝置的控制器的相關規定。
D-Pad 最小控制項
電視裝置的預設控制器為 D-Pad。一般來說,應用程式必須可透過遙控器操作,只有向上、向下、向左、向右、選取、返回和主畫面按鈕。如果應用程式通常需要提供額外控制項的遊戲控制器,請嘗試僅使用這些 D-Pad 控制器來支援遊戲過程。否則,請警告使用者需要使用控制器,並讓他們使用 D-Pad 控制器順利離開遊戲。
如要進一步瞭解如何使用電視裝置的 D-pad 控制器處理導覽,請參閱「電視導覽」。
處理控制器中斷連線
電視適用的控制器經常為藍牙裝置,可能會定期進入休眠模式並中斷電視裝置連線,嘗試節省電力。也就是說,如果應用程式未設為處理這些重新連線事件,應用程式可能會中斷或重新啟動。這類事件可能發生於下列任一情況:
- 在播放長度數分鐘的影片時,D-Pad 或遊戲控制器可能會進入休眠模式、與電視裝置中斷連線,並在稍後重新連線。
- 在遊戲過程中,新玩家可能會使用尚未連線的遊戲控制器加入遊戲。
- 在遊戲過程中,玩家可能會離開遊戲並取消連結遊戲控制器。
凡是可能中斷連線及重新連線的電視應用程式活動,都必須設定在應用程式資訊清單中處理重新連線事件。以下程式碼範例示範如何讓活動處理設定變更,包括鍵盤或導覽裝置的連線、中斷連線或重新連線:
<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 輸入變化版本
電視裝置使用者可能會擁有多種控制器類型與電視搭配使用。舉例來說,使用者可能同時擁有基本的 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() | 播放 |
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 主畫面或電視節目播放 > TV 應用程式主畫面 > Android TV 主畫面。
想進一步瞭解導覽設計,請參閱「 設計返回和向上導覽」一文。如要瞭解實作方式,請參閱提供適當的返回導覽功能。
處理遊戲的控制器
支援 D-Pad 控制項
這個控制項集是 Android TV 裝置的預設控制項,因此可以規劃 D-Pad 的控制項配置。玩家必須能夠使用 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 遊戲搖桿範本的控制器操作說明範例。