Botones físicos

Por lo general, un dispositivo wearable contiene varios botones físicos, también conocidos como coronas. Los dispositivos Wear OS siempre tienen, como mínimo, un botón (el botón de encendido). Además, es posible que haya cero o más botones multifunción. Algunos dispositivos también proporcionan un botón lateral giratorio físico.

En tu app, puedes asignar botones multifunción a acciones para cuando la app esté en primer plano. Por ejemplo, una app de fitness puede iniciar o pausar un entrenamiento con botones multifunción:

Un reloj con varios botones laterales. El sistema designa uno de los botones como botón multifunción.
Figura 1: App de fitness para Wear OS que muestra botones multifunción.

Para conocer los casos de uso apropiados y las consideraciones de diseño, consulta los principios de diseño de Wear OS.

En este documento, se describe cómo recuperar información sobre los botones multifunción disponibles en un dispositivo y cómo procesar las pulsaciones de botones.

Metadatos de botones

Para obtener información adicional sobre los botones de un dispositivo, usa la API definida en la biblioteca de AndroidX Wear Input. Agrega la siguiente dependencia al archivo build.gradle del módulo de tu app:

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

Cantidad de botones

Para determinar cuántos botones están disponibles en el dispositivo, usa el método WearableButtons.getButtonCount(). Este método incluye el botón de encendido, por lo que, si el método muestra un valor mayor que uno, hay botones multifunción disponibles para usar. Para obtener un recuento preciso de los botones multifunción asignables, resta uno de la cantidad, ya que el primer botón siempre es el de encendido.

Claves de códigos para la presión de botones

Cada botón se asigna a una constante int de la clase KeyEvent, como se muestra en la siguiente tabla:

Botón KeyEvent
Botón multifunción 1 KEYCODE_STEM_1
Botón multifunción 2 KEYCODE_STEM_2
Botón multifunción 3 KEYCODE_STEM_3

El siguiente código de ejemplo muestra cómo obtener el recuento de botones disponibles:

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

Cómo controlar las presiones de los botones

Tu app puede controlar varios códigos de botones:

  • KEYCODE_STEM_1.
  • KEYCODE_STEM_2.

Tu app puede recibir estos códigos clave y convertirlos en acciones específicas en la app.

Para controlar cómo se presiona un botón, implementa el método onKeyDown().

Por ejemplo, esta implementación responde a las pulsaciones de un botón para controlar acciones en una app:

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

Cómo determinar las posiciones de los botones

La biblioteca de AndroidX proporciona dos métodos que describen la ubicación de un botón:

Si estas APIs no satisfacen las necesidades de tu app, también puedes usar la API de WearableButtons.getButtonInfo() para obtener la ubicación del botón en la pantalla y manejarlo de manera más personalizada. Si quieres obtener más información sobre las APIs, consulta la referencia de la API de Wear.