Android 11 デベロッパー プレビュー 2 が公開されました。ぜひお試しのうえ、フィードバックをお寄せください

管理电视控制器

电视设备需要借助辅助硬件设备来与应用交互,辅助硬件设备可以是基本遥控器或游戏控制器的形式。这意味着您的应用必须支持方向键输入。这还意味着您的应用可能需要处理离线控制器以及多种类型控制器的输入。

本课将介绍有关处理电视设备控制器的要求。

方向键基本控制按钮

电视设备的默认控制器是方向键。一般而言,您的应用应该可以使用仅包含向上、向下、向左、向右、选择、返回和主页按钮的遥控器进行操作。对于游戏而言,通常需要使用带有更多控制按钮的游戏控制器进行操作。如果您的应用是一款游戏,则应该尝试允许通过这些方向键控制按钮来操作游戏。在这种情况下,您的应用还应该提醒用户需要使用控制器,并允许他们使用方向键控制器正常退出游戏。如需详细了解如何使用方向键控制器在电视设备上进行导航,请参阅创建电视导航

处理控制器断开连接事件

电视控制器通常是蓝牙设备,这些设备可能会通过间歇性地进入休眠模式并断开与电视设备的连接来节省电能。这意味着,如果未配置应用对这些重新连接事件进行处理,则可能会导致应用中断或重新启动。在以下任何一种情况下都可能发生这些事件:

  • 在观看一段几分钟长的视频时,方向键或游戏控制器进入休眠模式,断开与电视设备的连接,稍后又重新连接。
  • 玩游戏时,新加入游戏的玩家所使用的游戏控制器尚未连接。
  • 玩游戏时,一位玩家离开游戏并断开游戏控制器的连接。

对于任何受断开连接和重新连接事件影响的电视应用 Activity,必须在应用清单文件中将其配置为对重新连接事件进行处理。以下代码示例展示了如何使 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 框架重新启动,后一种方式会给用户带来不好的体验。

处理方向键输入变体

电视设备用户可能会有多种类型的电视控制器。例如,用户可能既有基本方向键控制器,又有游戏控制器。将游戏控制器作为方向键使用时,其提供的键控代码可能与物理方向键所发送的键控代码不同。

您的应用应该能够处理来自游戏控制器的方向键输入变体,这样用户就不必实际更换控制器来操作您的应用了。要详细了解如何处理这些输入变体,请参阅处理控制器操作

处理按钮事件

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

电视界面事件

应用应根据下表来处理生成这些 KeyEvent 的按钮。

KeyEvent行为
BUTTON_B、BACK返回
BUTTON_SELECT、BUTTON_A、ENTER、DPAD_CENTER、KEYCODE_NUMPAD_ENTER选择
DPAD_UP、DPAD_DOWN、DPAD_LEFT、DPAD_RIGHT导航

媒体事件

当用户观看媒体内容时,您的应用应根据下表来处理生成这些 KeyEvent 的按钮。如果您的应用正在控制 MediaSession,它应使用 MediaControllerAdapter 来调用如下所示的某个 MediaControllerCompat.TransportControls 方法。请注意,在此上下文中,选择按钮将充当播放/暂停按钮。

KeyEventTransportControls 调用行为
BUTTON_SELECT、BUTTON_A、ENTER、DPAD_CENTER、KEYCODE_NUMPAD_ENTERpause()播放
BUTTON_START、BUTTON_SELECT、BUTTON_A、ENTER、DPAD_CENTER、KEYCODE_NUMPAD_ENTERpause()暂停
BUTTON_R1skipToNext()跳到下一个
BUTTON_L1skipToPrevious()跳到上一个
DPAD_RIGHT、BUTTON_R2、AXIS_RTRIGGER、AXIS_THROTTLEfastForward()快进
DPAD_LEFT、BUTTON_L2、 AXIS_LTRIGGER、AXIS_BRAKErewind()快退
(没有与“停止”关联的 KeyEvent)stop()停止

处理游戏控制器

支持方向键控制

围绕方向键 (D-pad) 控制规划您的控制方案,因为这组控制是 Android 电视设备的默认设置。玩家需要能够在游戏的各个方面使用方向键,不仅仅是执行核心游戏操控,也包括浏览菜单和广告。为此,您还应确保您的 Android 电视游戏不会涉及触控界面。例如,Android 电视游戏不应向玩家显示“点按此处继续”这样的提示。

如何设计玩家与控制器的互动对于实现卓越的用户体验至关重要:

  • 提前说明控制器要求。利用 Google Play 描述向玩家说明对控制器的要求。如果游戏更适合使用带有操纵杆而不是只有方向键的游戏手柄,请明确说明这一点。如果玩家使用了不适合游戏的控制器,则很有可能会获得不好的游戏体验,进而对游戏做出不利的评价。
  • 使用一致的按钮映射。直观灵活的按钮映射对于提供良好的用户体验十分关键。例如,您应当遵循已被人们广泛接受的习惯,用 A 按钮表示“同意”,用 B 按钮表示“取消”。此外,您还可以通过允许重新映射来提供灵活性。如需详细了解按钮映射,请参阅处理控制器操作
  • 检测控制器功能并相应做出调整。查询控制器的功能,以优化控制器与游戏的匹配。例如,您可能想让玩家通过在空中挥动控制器来操控一个物体。但如果玩家的控制器缺少加速度计和陀螺仪硬件,挥动就将不起作用。因此,您的游戏应查询控制器的功能,如果不支持运动检测,则应切换到其他可用的控件方案。要详细了解如何查询控制器功能,请参阅跨 Android 版本支持控制器

提供适当的返回按钮行为

返回按钮不应充当开关按钮。例如,不要将它用于打开和关闭菜单。它应当仅用于通过面包屑导航方式返回到玩家之前所在的屏幕,例如:游戏过程 > 游戏暂停屏幕 > 游戏主屏幕 > Android 主屏幕。

由于返回按钮只应执行线性(向后)导航,您可以使用返回按钮来退出游戏内菜单(通过其他按钮打开)并返回到游戏过程。要详细了解导航设计,请参阅返回和向上导航。要了解实现方式,请参阅提供正确的返回导航

使用适当的按钮

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

处理多个控制器

如果多名玩家同时玩一个游戏,且各自使用自己的控制器,在这种情况下匹配每一对玩家与控制器将十分重要。要了解如何实现控制器编号标识,请参见 getControllerNumber()

处理控制器断开连接事件

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

此外,对话框还应显示问题排查提示,例如提醒玩家“检查蓝牙连接”的弹出式对话框。要详细了解如何实现输入设备支持,请参阅处理控制器操作。要了解有关蓝牙连接的详细信息,请参阅蓝牙

显示控制器说明

如果您的游戏提供图形化游戏控制说明,控制器图像应不含品牌信息,并且仅包含与 Android 兼容的按钮

要查看 Android 兼容控制器的图像示例,请下载 Android 电视游戏手柄模板 (ZIP)。其中包含一个黑色背景上的白色控制器和一个白色背景上的黑色控制器(如图 1 所示),分别以 PNG 文件和 Adobe® Illustrator® 文件的形式提供。

图 1 使用 Android 电视游戏手柄模板 (ZIP) 的控制器说明示例