Физические кнопки

Носимое устройство обычно содержит несколько физических кнопок, также известных как _stems_. Устройства Wear OS всегда имеют как минимум одну кнопку: кнопку питания. Помимо этого, может присутствовать ноль или более многофункциональных кнопок.

В вашем приложении вы можете назначать действиям многофункциональные кнопки. Например, фитнес-приложение может запускать или приостанавливать тренировку с помощью многофункциональных кнопок:

Примечание. В Wear OS 3.0 зарезервированы две кнопки для операционной системы, а в Wear OS 2.0 — только одна. Это уменьшает количество кнопок, которым можно назначить действия.

Для подходящих вариантов использования и рекомендаций по проектированию ознакомьтесь с принципами проектирования Wear OS .

В этом руководстве описывается, как получить информацию о доступных многофункциональных кнопках на устройстве и как обрабатывать нажатия кнопок.

Метаданные кнопки

Чтобы получить дополнительную информацию о кнопках на устройстве, используйте API, определенный в библиотеке AndroidX Wear Input . Добавьте следующую зависимость в файл build.gradle вашего модуля приложения:

dependencies {
implementation "androidx.wear:wear-input:1.0.0"
}

Количество кнопок

Чтобы узнать, сколько кнопок доступно на устройстве, используйте метод WearableButtons.getButtonCount() . Этот метод включает кнопку питания, поэтому, если метод возвращает значение больше единицы, для использования доступны многофункциональные кнопки. Чтобы получить точное количество назначаемых многофункциональных кнопок, вычтите одну из этого количества, поскольку первая кнопка всегда является кнопкой питания.

Коды клавиш для нажатия кнопок

Каждая кнопка сопоставляется с константой int из класса KeyEvent , как показано в следующей таблице:

Кнопка Ключевое событие
Многофункциональная кнопка 1 KEYCODE_STEM_1
Многофункциональная кнопка 2 KEYCODE_STEM_2
Многофункциональная кнопка 3 KEYCODE_STEM_3

В следующем примере кода показано, как получить количество доступных кнопок:

Котлин

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
}

Ява

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() .

Например, эта реализация реагирует на нажатия кнопок для управления действиями в приложении:

Котлин

// 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)
    }
}

Ява

@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-интерфейсы не соответствуют потребностям вашего приложения, вы также можете использовать API WearableButtons.getButtonInfo() , чтобы получить расположение кнопки на экране и обрабатывать ее более индивидуально. Дополнительную информацию об API см. в справочнике по Wear API .