管理 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 輸入的變化,使用戶無需切換控制器即可操作您的應用程式。有關處理輸入變化的更多信息,請參閱 處理方向鍵輸入

處理按鈕事件

使用者點選控制器上的按鈕時,應用程式會收到含有 KeyEvent 的事件。該按鈕的預期行為可能是媒體事件,例如播放、暫停或停止,也可能是電視類型的事件,例如選擇或導航。為提供良好的使用者體驗,請為控制器按鈕指派一致的行為。

電視使用者介面事件

將電視使用者介面行為指派給產生 KeyEvent 類型的按鈕,如下表所示:

KeyEvent行為
KEYCODE_BUTTON_BKEYCODE_BACK返回
KEYCODE_BUTTON_SELECTKEYCODE_BUTTON_AKEYCODE_ENTERKEYCODE_DPAD_CENTERKEYCODE_NUMPAD_ENTER選取
KEYCODE_DPAD_UPKEYCODE_DPAD_DOWNKEYCODE_DPAD_LEFTKEYCODE_DPAD_RIGHT導覽

媒體活動

使用者觀看媒體時,請為按鈕指派行為,產生 KeyEvent 型別,如下表所示。如果應用程式控制 MediaSession,請使用 MediaControllerAdapter 呼叫表格中顯示的其中一種 MediaControllerCompat.TransportControls 方法。請注意,選取按鈕在此情境中會做為「播放」或「暫停」按鈕。

KeyEventTransportControls 調用行為
BUTTON_SELECTBUTTON_AENTERDPAD_CENTERKEYCODE_NUMPAD_ENTER play()播放
BUTTON_STARTBUTTON_SELECTBUTTON_AENTERDPAD_CENTERKEYCODE_NUMPAD_ENTER pause()暫停
BUTTON_R1skipToNext()跳到下一個
BUTTON_L1skipToPrevious()跳到上一個
DPAD_RIGHTBUTTON_R2AXIS_RTRIGGERAXIS_THROTTLEfastForward()快轉
DPAD_LEFTBUTTON_L2AXIS_LTRIGGERAXIS_BRAKErewind()倒轉
N/Astop()停止

注意:使用 MediaSession 時,請勿覆寫媒體專屬按鈕的處理方式,例如 KEYCODE_MEDIA_PLAYKEYCODE_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 遊戲手把範本的控制器指令範例。