可穿戴设备通常包含多个物理按钮,也称为 _杆_。Wear OS 设备始终至少有一个按钮:电源按钮。除此之外,可能还存在零个或多个多功能按钮。
在您的应用中,您可以将多功能按钮分配给操作。例如,健身应用可以使用多功能按钮启动或暂停锻炼。
注意:Wear OS 3.0 为操作系统保留了两个按钮,而 Wear OS 2.0 只保留了一个按钮。这减少了您可以为其分配操作的按钮数量。
有关合适的用例和设计注意事项,请查看 Wear OS 设计原则.
本指南介绍如何检索有关设备上可用多功能按钮的信息,以及如何处理按钮按下事件。
按钮元数据
要获取有关设备上按钮的额外信息,请使用 Wear Input AndroidX 库中定义的 API。在您的应用模块的 build.gradle
文件中添加以下依赖项
dependencies { implementation "androidx.wear:wear-input:1.0.0" }
按钮数量
要找出设备上有多少个按钮可用,请使用 WearableButtons.getButtonCount()
方法。此方法包括电源按钮,因此如果方法返回的值大于 1,则表明有可用的多功能按钮。要获得可分配多功能按钮的准确数量,请从计数中减去 1,因为第一个按钮始终是电源按钮。
按钮按下事件的键码
每个按钮都映射到 KeyEvent
类中的一个 int
常量,如以下表格所示
按钮 | KeyEvent |
---|---|
多功能按钮 1 | KEYCODE_STEM_1
|
多功能按钮 2 | KEYCODE_STEM_2
|
多功能按钮 3 | KEYCODE_STEM_3
|
以下示例代码显示了如何获取可用的按钮数量
Kotlin
val count = WearableButtons.getButtonCount(context) if (count > 1) { // There are multifunction 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 multifunction 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 }
处理按钮按下事件
您的应用可以处理许多可能的按钮键码
-
KEYCODE_STEM_1
-
KEYCODE_STEM_2
-
KEYCODE_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); }
确定按钮位置
AndroidX 库提供了两种方法来描述按钮的位置
-
WearableButtons.getButtonLabel()
返回一个本地化字符串,描述按钮在设备上的一般位置。 -
WearableButtons.getButtonIcon()
返回一个图标,代表按钮在设备上的通用位置。
注意: 我们建议您避免使用文字描述来描述按钮及其功能。 而是使用可视化指示器。 但是,在某些情况下,描述按钮可能更有意义。
之前的方法是为了简单的描述而设计的。 如果这些 API 不适合您的应用程序需求,您也可以使用 WearableButtons.getButtonInfo()
API 来获取按钮在屏幕上的位置,并以更自定义的方式处理它。 有关 API 的更多信息,请参见 Wear API 参考。