Wear 上的多功能按钮

除电源(表把)按钮外,Wear OS by Google 谷歌还支持额外的物理按钮,称为多功能 (MF) 按钮。穿戴式设备支持库提供了 API 来确定有关设备上可用 MF 按钮的信息。

这节课重点介绍如何检索有关设备上可用 MF 按钮的信息并处理 KeyEvent 对象。

请参阅以下相关资源:

处理按键事件

如果您的应用需要处理多功能按钮按下动作,可通过 Android 框架中的标准按键事件代码来实现。键码通常与设备上的各个物理按钮一一对应。

您的应用可以处理的一组可能的按钮键码是 KEYCODE_STEM_1KEYCODE_STEM_2KEYCODE_STEM_3。您的应用可以接收这些键码,并将其转换为特定的应用内操作。

要处理按钮按下动作,请实现 onKeyDown() 方法。

例如,以下实现可响应某个按钮按下动作,以控制应用中的操作:

Kotlin

    // Activity
    override fun onKeyDown(keyCode: Int, event: KeyEvent): Boolean {
        return if (event.repeatCount == 0) {
            when (keyCode) {
                KeyEvent.KEYCODE_STEM_1 -> {
                    // Do stuff
                    true
                }
                KeyEvent.KEYCODE_STEM_2 -> {
                    // Do stuff
                    true
                }
                KeyEvent.KEYCODE_STEM_3 -> {
                    // Do stuff
                    true
                }
                else -> {
                    super.onKeyDown(keyCode, event)
                }
            }
        } else {
            super.onKeyDown(keyCode, event)
        }
    }
    

Java

    @Override
    // Activity
    public boolean onKeyDown(int keyCode, KeyEvent event){
      if (event.getRepeatCount() == 0) {
        if (keyCode == KeyEvent.KEYCODE_STEM_1) {
          // Do stuff
          return true;
        } else if (keyCode == KeyEvent.KEYCODE_STEM_2) {
          // Do stuff
          return true;
        } else if (keyCode == KeyEvent.KEYCODE_STEM_3) {
          // Do stuff
          return true;
        }
      }
      return super.onKeyDown(keyCode, event);
    }
    

查找可用按钮

要找出哪些按钮可供使用,您可以使用穿戴式设备支持库中提供的 WearableButtons.getButtonInfo()WearableButtons.getButtonCount() 方法。要查找是否有可用的辅助按钮,一种简单的方法是检查 WearableButtons.getButtonCount() 的返回值。如果该值大于 1,就表示有可用的多功能按钮。

按钮按下动作的键码

每个按钮都映射到 KeyEvent 类中的一个 int 常量,如下表所示:

按钮 KeyEvent
MF 按钮 1 KEYCODE_STEM_1
MF 按钮 2 KEYCODE_STEM_2
MF 按钮 3 KEYCODE_STEM_3
  • 如果设备只有一个 MF 按钮,则它始终映射到 KEYCODE_STEM_1
  • 如果设备有两个 MF 按钮,则它们始终映射到 KEYCODE_STEM_1 KEYCODE_STEM_2
  • 如果设备有三个 MF 按钮,则它们始终映射到 KEYCODE_STEM_1KEYCODE_STEM_2KEYCODE_STEM_3

以下示例代码展示了如何获取可用的按钮计数:

Kotlin

    val count = WearableButtons.getButtonCount(context)

    if (count > 1) {
        // There are multi-function buttons available
    }

    val buttonInfo = WearableButtons.getButtonInfo(activity, KeyEvent.KEYCODE_STEM_1)

    if (buttonInfo == null) {
        // KEYCODE_STEM_1 is unavailable
    } else {
        // KEYCODE_STEM_1 is present on the device
    }
    

Java

    int count = WearableButtons.getButtonCount(context);

    if (count > 1) {
      // There are multi-function buttons available
    }

    WearableButtons.ButtonInfo buttonInfo =
      WearableButtons.getButtonInfo(activity, KeyEvent.KEYCODE_STEM_1);

    if (buttonInfo == null) {
      // KEYCODE_STEM_1 is unavailable
    } else {
      // KEYCODE_STEM_1 is present on the device
    }
    

确定按钮位置

穿戴式设备支持库提供了两个用来描述按钮位置的 API:

注意:在描述按钮及其功能时,我们建议您避免使用文本描述符,而应使用视觉指示符。不过,在某些情况下,可能描述按钮更有意义。

上述方法专为简单的描述而设计。如果这些 API 不符合您的应用需求,您还可以使用 WearableButtons.getButtonInfo() API 获取按钮在屏幕上的位置,并以更加个性化的方式对其进行处理。如需详细了解这些 API,请参阅 Wear API 参考文档