Pulsanti fisici

In genere un dispositivo indossabile contiene più pulsanti fisici, chiamati anche _stems_. I dispositivi Wear OS hanno sempre, almeno, un pulsante: il tasto di accensione. Oltre a questo, potrebbero essere presenti zero o più pulsanti multifunzione.

Nella tua app puoi assegnare pulsanti multifunzione alle azioni. Ad esempio, un'app per l'attività fisica potrebbe avviare o sospendere un esercizio utilizzando pulsanti multifunzione:

Nota: Wear OS 3.0 riserva due pulsanti per il sistema operativo, mentre Wear OS 2.0 ne prenota uno solo. In questo modo ridurrai il numero di pulsanti a cui puoi assegnare azioni.

Per casi d'uso adeguati e considerazioni sulla progettazione, esamina i principi di progettazione di Wear OS.

Questa guida descrive come recuperare informazioni sui pulsanti multifunzione disponibili su un dispositivo e come elaborare le pressioni dei pulsanti.

Metadati del pulsante

Per ottenere informazioni aggiuntive sui pulsanti su un dispositivo, usa l'API definita nella libreria AndroidX Wear Input. Aggiungi la dipendenza seguente nel file build.gradle del modulo dell'app:

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

Numero di pulsanti

Per scoprire quanti pulsanti sono disponibili sul dispositivo, utilizza il metodo WearableButtons.getButtonCount(). Questo metodo include il tasto di accensione, quindi se il metodo restituisce un valore maggiore di uno, sono disponibili pulsanti multifunzione da utilizzare. Per ottenere un conteggio preciso dei pulsanti multifunzione assegnabili, sottraine uno dal conteggio, dato che il primo è sempre il tasto di accensione.

Codici per la pressione dei pulsanti

Ogni pulsante è mappato a una costante int della classe KeyEvent, come mostrato nella seguente tabella:

Pulsante Evento chiave
Pulsante multifunzione 1 KEYCODE_STEM_1
Pulsante multifunzione 2 KEYCODE_STEM_2
Pulsante multifunzione 3 KEYCODE_STEM_3

Il codice di esempio seguente mostra come ottenere il numero di pulsanti disponibili:

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
}

Maneggia la pressione dei pulsanti

Esistono diversi possibili codici chiave dei pulsanti che la tua app può gestire:

  • KEYCODE_STEM_1
  • KEYCODE_STEM_2
  • KEYCODE_STEM_3

La tua app può ricevere questi codici chiave e convertirli in azioni in-app specifiche.

Per gestire la pressione di un pulsante, implementa il metodo onKeyDown().

Ad esempio, questa implementazione risponde alla pressione dei pulsanti per controllare le azioni in un'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);
}

Stabilire la posizione dei pulsanti

La libreria AndroidX offre due metodi che descrivono la posizione di un pulsante:

Nota: consigliamo di evitare di utilizzare descrittori testuali per la descrizione dei pulsanti e delle loro funzioni. Utilizza invece indicatori visivi. Tuttavia, in alcuni casi può essere più sensato descrivere un pulsante.

I metodi precedenti erano progettati per descrizioni semplici. Se queste API non soddisfano le esigenze della tua app, puoi utilizzare anche l'API WearableButtons.getButtonInfo() per ottenere la posizione del pulsante sullo schermo e gestirlo in modo più personalizzato. Per ulteriori informazioni sulle API, consulta la documentazione di riferimento per le API Wear.