Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.

Botones multifunción en Wear

Además del botón de encendido (lateral), Wear OS by Google admite botones físicos adicionales conocidos como botones multifunción (MF). La Biblioteca de compatibilidad con dispositivos wearable proporciona API para determinar la información sobre los botones MF disponibles en un dispositivo.

Esta lección se centra en cómo puedes recuperar información sobre los botones MF disponibles en un dispositivo y procesar objetos KeyEvent.

Consulta los siguientes recursos relacionados:

Cómo controlar eventos clave

Si tu app necesita manejar una pulsación de botón multifunción, puede hacerlo a través de los códigos de evento de pulsación de tecla estándar en el marco de trabajo de Android. Por lo general, las claves de código se corresponden una a una con los botones físicos individuales de un dispositivo.

El conjunto de claves de código posibles que tu app puede manejar es: KEYCODE_STEM_1, KEYCODE_STEM_2, KEYCODE_STEM_3. Tu app puede recibir estos códigos clave y convertirlos en acciones específicas.

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

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

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

Cómo encontrar botones disponibles

Para saber qué botones están disponibles, puedes usar los métodos WearableButtons.getButtonInfo() y WearableButtons.getButtonCount() disponibles en la biblioteca de compatibilidad para dispositivos wearable. Una forma sencilla de averiguar si hay botones secundarios disponibles es verificar el valor que muestra WearableButtons.getButtonCount(). Si es superior a 1, significa que hay botones multifunción disponibles para usar.

Claves de códigos para la pulsació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 Evento clave
Botón MF 1 KEYCODE_STEM_1
Botón MF 2 KEYCODE_STEM_2
Botón MF 3 KEYCODE_STEM_3
  • Si el dispositivo solo tiene un botón MF, siempre se asigna a KEYCODE_STEM_1.
  • Si el dispositivo tiene tres botones MF, siempre se asignan a KEYCODE_STEM_1 y KEYCODE_STEM_2.
  • Si el dispositivo tiene tres botones MF, siempre se asignan a KEYCODE_STEM_1, KEYCODE_STEM_2 y KEYCODE_STEM_3.

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

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
    }
    

Cómo determinar las posiciones de los botones

La biblioteca de compatibilidad con dispositivos wearable proporciona dos API que describen la ubicación de un botón:

Nota: Te recomendamos evitar el uso de descriptores textuales a la hora de describir los botones y sus funciones y, en su lugar, utilizar indicadores visuales. Sin embargo, puede haber algunos casos en los que describir un botón tenga más sentido.

Los métodos anteriores se diseñaron para descripciones simples. Si estas API no satisfacen las necesidades de tu app, también puedes usar la API 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 API, consulta la referencia de la API de Wear.