Przyciski fizyczne

Urządzenie do noszenia ma zwykle wiele fizycznych przycisków, nazywanych też _stems_. Urządzenia z Wear OS zawsze mają co najmniej 1 przycisk: przycisk zasilania. Oprócz tego nie będzie żadnych przycisków wielofunkcyjnych lub ich więcej.

W aplikacji możesz przypisać przyciski wielofunkcyjne do działań. Na przykład aplikacja do fitnessu może rozpoczynać lub wstrzymywać trening za pomocą przycisków wielofunkcyjnych:

Uwaga: Wear OS 3.0 rezerwuje 2 przyciski dla systemu operacyjnego, a Wear OS 2.0 – tylko jeden. Zmniejsza to liczbę przycisków, do których możesz przypisać działania.

Odpowiednie przypadki użycia i kwestie związane z projektowaniem znajdziesz w zasadach projektu Wear OS.

Z tego przewodnika dowiesz się, jak pobrać informacje o przyciskach wielofunkcyjnych dostępnych na urządzeniu i jak przetworzyć naciśnięcia przycisków.

Metadane przycisku

Aby uzyskać dodatkowe informacje o przyciskach na urządzeniu, użyj interfejsu API zdefiniowanego w bibliotece danych wejściowych Wear w AndroidzieX. Dodaj tę zależność do pliku build.gradle modułu aplikacji:

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

Liczba przycisków

Aby sprawdzić, ile przycisków jest dostępnych na urządzeniu, użyj metody WearableButtons.getButtonCount(). Ta metoda zawiera przycisk zasilania, więc jeśli zwraca wartość większą niż 1, możesz użyć przycisków wielofunkcyjnych. Aby uzyskać dokładną liczbę możliwych do przypisania przycisków wielofunkcyjnych, odejmij jeden od tej liczby, ponieważ pierwszy przycisk jest zawsze przyciskiem zasilania.

Kody klawiszy naciśnięć przycisków

Każdy przycisk jest zmapowany na stałą int z klasy KeyEvent, jak pokazano w tej tabeli:

Przycisk Kluczowe zdarzenie
Przycisk wielofunkcyjny 1 KEYCODE_STEM_1
Przycisk wielofunkcyjny 2 KEYCODE_STEM_2
Przycisk wielofunkcyjny 3 KEYCODE_STEM_3

Ten przykładowy kod pokazuje, jak uzyskać liczbę dostępnych przycisków:

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
}

Uchwyt na naciśnięcia przycisku

Aplikacja może obsługiwać kilka różnych kodów klawiszy:

  • KEYCODE_STEM_1
  • KEYCODE_STEM_2
  • KEYCODE_STEM_3

Twoja aplikacja może otrzymać te kody kluczy i przekonwertować je na określone działania w aplikacji.

Aby obsługiwać naciśnięcie przycisku, zaimplementuj metodę onKeyDown().

Ta implementacja reaguje na przykład na naciśnięcia przycisku, by kontrolować działania w aplikacji:

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

Określanie pozycji przycisku

Biblioteka AndroidX udostępnia 2 metody opisujące lokalizację przycisku:

Uwaga: odradzamy stosowanie deskryptorów tekstowych do opisywania przycisków i ich funkcji. Zamiast tego używaj wskaźników wizualnych. W niektórych przypadkach opis przycisku może być jednak bardziej sensowny.

Poprzednie metody zostały opracowane pod kątem prostych opisów. Jeśli te interfejsy API nie odpowiadają potrzebom Twojej aplikacji, możesz też użyć interfejsu WearableButtons.getButtonInfo() API, aby uzyskać lokalizację przycisku na ekranie i obsługiwać go w bardziej dostosowany sposób. Więcej informacji o interfejsach API znajdziesz w dokumentacji interfejsu Wear API.