У носимого устройства обычно несколько физических кнопок, также известных как ножки. На устройствах Wear OS всегда есть хотя бы одна кнопка – кнопка питания. Кроме того, может быть ноль или несколько многофункциональных кнопок. На некоторых устройствах также есть физическая вращающаяся боковая кнопка.
В приложении можно назначить многофункциональным кнопкам действия, которые будут выполняться, когда приложение активно. Например, фитнес-приложение может запускать или приостанавливать тренировку с помощью многофункциональных кнопок:
Подходящие варианты использования и рекомендации по дизайну приведены в принципах дизайна Wear OS.
В этом документе рассказывается, как получить информацию о доступных многофункциональных кнопках на устройстве и как обрабатывать нажатия на них.
Метаданные кнопки
Чтобы получить дополнительную информацию о кнопках на устройстве, используйте API, определенный в библиотеке AndroidX Wear Input. Добавьте в файл build.gradle модуля приложения следующую зависимость:
dependencies {
implementation "androidx.wear:wear-input:1.2.0"
}
Количество кнопок
Чтобы определить, сколько кнопок доступно на устройстве, используйте метод WearableButtons.getButtonCount(). Этот метод включает кнопку питания, поэтому, если он возвращает значение больше единицы, значит, доступны многофункциональные кнопки. Чтобы узнать точное количество многофункциональных кнопок, которые можно назначить, вычтите из общего числа единицу, поскольку первая кнопка всегда является кнопкой питания.
Коды клавиш для нажатий кнопок
Каждая кнопка сопоставлена с константой int из класса KeyEvent, как показано в таблице ниже.
| кнопок; | KeyEvent |
|---|---|
| Многофункциональная кнопка 1 | KEYCODE_STEM_1 |
| Многофункциональная кнопка 2 | KEYCODE_STEM_2 |
| Многофункциональная кнопка 3 | KEYCODE_STEM_3 |
В приведенном ниже примере кода показано, как получить количество доступных кнопок.
val count = WearableButtons.getButtonCount(context) if (count > 1) { Log.d(TAG, "More than one button available") } val buttonInfo = WearableButtons.getButtonInfo( activity, KeyEvent.KEYCODE_STEM_1 ) if (buttonInfo == null) { // KEYCODE_STEM_1 is unavailable Log.d(TAG, "KEYCODE_STEM_1 not available") } else { // KEYCODE_STEM_1 is present on the device Log.d(TAG, "KEYCODE_STEM_1 is present on the device") }
Обработка нажатий кнопок
Приложение может обрабатывать несколько кодов клавиш:
KEYCODE_STEM_1.KEYCODE_STEM_2.
Приложение может получать эти коды клавиш и преобразовывать их в определенные действия.
Чтобы обрабатывать нажатия кнопок, реализуйте метод onKeyDown().
Например, этот код реагирует на нажатия кнопок, чтобы управлять действиями в приложении:
override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean { return if (event?.repeatCount == 0) { when (keyCode) { KeyEvent.KEYCODE_STEM_1 -> { Log.d(TAG, "KEYCODE_STEM_1 pressed") true } KeyEvent.KEYCODE_STEM_2 -> { Log.d(TAG, "KEYCODE_STEM_2 pressed") true } else -> { super.onKeyDown(keyCode, event) } } } else { super.onKeyDown(keyCode, event) } }
Определите положение кнопок
В библиотеке AndroidX есть два метода, которые позволяют описать местоположение кнопки:
WearableButtons.getButtonLabel()возвращает локализованную строку, описывающую общее расположение кнопки на устройстве.WearableButtons.getButtonIcon()возвращает значок, обозначающий общее расположение кнопки на устройстве.
Если эти API не подходят для вашего приложения, вы также можете использовать WearableButtons.getButtonInfo() API, чтобы получить местоположение кнопки на экране и обрабатывать его более индивидуально. Подробнее о Wear API…