管理 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_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()倒轉
不適用stop()停止

注意:使用 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 遊戲手把範本的控制器操作說明範例。