管理 TV 控制器

TV 设备需要使用辅助硬件设备才能与应用交互 - 这是基本的 遥控器或游戏控制器。因此,您的应用必须支持方向键输入。 此外,您的应用可能需要处理离线控制器以及来自多个控制器的输入。 控制器的类型。

本指南将介绍有关处理 TV 设备控制器的要求。

方向键基本控制按钮

TV 设备的默认控制器是方向键。一般来说,您的应用必须能够通过 只有向上、向下、向左、向右、选择、返回和主屏幕按钮的遥控器。如果您的应用 是一款游戏,通常需要有带额外控件的游戏控制器, 尝试仅通过这些方向键控制游戏内容。否则,请警告用户 需要使用控制器,让他们使用方向键控制器正常退出游戏。

如需详细了解如何使用方向键控制器在电视设备上进行导航,请参阅 TV 导航

处理控制器断开连接事件

电视控制器通常是蓝牙设备,它们可能会定期尝试省电 进入睡眠模式并与电视设备断开连接。这意味着应用可能 如果未配置为处理这些重新连接事件,设备会中断或重新启动。这些活动 在以下任一情况下都可能发生:

  • 时长几分钟的视频、方向键或游戏 控制器可能会进入睡眠模式,断开与电视设备的连接,并在稍后重新连接。
  • 在玩游戏的过程中,新玩家在加入游戏时使用的游戏控制器 尚未连接。
  • 在游戏过程中,玩家可能会离开游戏并断开与游戏控制器的连接。

任何受“断开连接和重新连接”事件影响的 TV 应用活动都必须配置为 在应用清单中处理重新连接事件。以下代码示例演示了如何 使 activity 能够处理配置变更,包括使用键盘或导航设备 正在连接、断开连接或重新连接:

<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 框架重新启动,Android 框架并不是 良好的用户体验

处理方向键输入变化

电视设备用户可能有多种控制器与电视配合使用。对于 例如,用户可能既有基本的方向键控制器,又有游戏控制器。键代码 使用方向键功能时,游戏控制器提供的功能可能与按键 基本方向键发送的验证码。

处理方向键输入的变化,这样用户就不会 必须切换控制器才能运行您的应用。如需详细了解如何处理 请参阅 处理方向键输入

处理按钮事件

当用户点击控制器上的按钮时,您的应用会收到包含 KeyEvent。预期 该按钮的行为可能是媒体事件(如播放、暂停或停止),也可能是电视类型的事件(如 选择或导航。为了提供良好的用户体验, 控制器按钮的行为。

TV 界面事件

将 TV 界面行为分配给生成 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 主屏幕或 电视节目播放 >TV 应用主屏幕 >Android TV 主屏幕。

有关导航设计的详情,请参见 设计返回和向上导航。要了解具体实施方法,请参阅 提供适当的返回导航

处理游戏控制器

支持方向键控制

围绕方向键控件规划您的控制方案,因为这个控件集是 这是 Android TV 设备的默认设置。玩家需要能够使用方向键进行各种操作 不仅能控制核心游戏内容,还能浏览菜单和广告。因此 确保您的 Android TV 游戏不是指触摸界面,这类语言包括 “点按此处以继续。”

要想打造优质的用户,关键在于如何调整玩家与控制器的互动 体验不妨参考以下最佳实践:

  • 事先告知用户控制器要求:使用 Google Play 说明 以便告知玩家对控制器的期望如果一款游戏更适合 例如,配有操纵杆的游戏手柄,而不是只有方向键的游戏手柄,应明确这一点。使用 不适合游戏的控制器可能会带来糟糕的体验, 很差。
  • 使用一致的按钮映射:直观的按钮映射是关键 提供良好的用户体验例如,使用“A”按钮,以遵守公认的惯例 按接受按钮,按 B 按钮取消。你还可以灵活选择 以可重新映射的形式实现如需详细了解按钮映射,请参阅手柄 控制器操作
  • 检测控制器功能并相应地进行调整:查询控制器 其功能来优化控制器与游戏之间的匹配。例如: 您可能想让玩家通过在空中挥动控制器来操控物体, 但如果 玩家的控制器缺少加速度计和陀螺仪硬件,挥动不起作用。 查询控制器,如果未启用移动侦测, 请切换到其他可用的控制方案。更多信息 有关查询控制器功能的信息,请参阅支持 控制器

使用适当的按钮

并非所有游戏控制器都配备开始、搜索或菜单按钮。确保您的界面不依赖于 如何使用这些按钮

处理多个控制器

如果多个玩家同时玩一个游戏,并且每个玩家都有自己的控制器,那么请务必 映射每个玩家-控制器对。有关如何实现控制器编号的信息 请参见 getControllerNumber()

处理控制器断开连接事件

如果控制器在游戏过程中断开连接,请暂停游戏并显示 对话框,提示已断开连接的玩家重新连接其控制器。

此外,请在对话框中提供问题排查提示。例如,告诉 播放器切换到“检查您的蓝牙连接”。如需详细了解如何实现输入设备 请参阅处理控制器 操作蓝牙概览

显示控制器说明

如果您的游戏提供了直观的游戏控制说明,请使用 控制器图片(不含品牌信息),且仅包含与 Android 兼容的按钮

如需查看 Android 兼容控制器的示例图片,请下载 Android TV 游戏手柄模板 (ZIP)。 它包含一个黑色背景上的白色控制器和一个白色背景上的黑色控制器 作为 PNG 文件和 Adobe® Illustrator® 文件,如图 1 所示。

图 1. 使用 Android TV 游戏手柄模板。