Wear の多機能ボタン

Wear OS by Google は、電源(ステム)ボタンに加え、多機能(MF)ボタンとして知られる物理的なボタンもサポートしています。ウェアラブル サポート ライブラリには、デバイスで使用可能な MF ボタンに関する情報を確認するための API が用意されています。

このレッスンでは、デバイスで使用可能な MF ボタンに関する情報を取得する方法と、KeyEvent オブジェクトを処理する方法について重点的に説明します。

以下の関連リソースもご覧ください。

キーイベントを処理する

アプリで多機能ボタンの押下を処理する必要がある場合、Android フレームワークの標準のキー押下イベントコードを介して処理できます。キーコードは通常、デバイス上の個々の物理ボタンと 1 対 1 で対応しています。

アプリで処理できるボタン キーコードには、KEYCODE_STEM_1KEYCODE_STEM_2KEYCODE_STEM_3 があります。アプリはこれらのキーコードを受け取って、特定のアプリ内操作に変換できます。

ボタンの押下を処理するには、onKeyDown() メソッドを実装します。

たとえば次の実装では、ボタンの押下に反応してアプリ内操作を制御しています。

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

使用可能なボタンを見つける

どのボタンを使用できるかを確認するには、ウェアラブル サポート ライブラリの WearableButtons.getButtonInfo() メソッドと WearableButtons.getButtonCount() メソッドを使用します。使用できるボタンがさらにあるかどうかは、WearableButtons.getButtonCount() の戻り値を調べることで簡単に確認できます。戻り値が 1 より大きい場合は、使用可能な多機能ボタンが複数存在します。

ボタン押下のキーコード

次の表に示すように、各ボタンは KeyEvent クラスの int 定数にマッピングされています。

ボタン KeyEvent
MF ボタン 1 KEYCODE_STEM_1
MF ボタン 2 KEYCODE_STEM_2
MF ボタン 3 KEYCODE_STEM_3
  • デバイスに MF ボタンが 1 つだけある場合は、ボタンが KEYCODE_STEM_1 にマッピングされます。
  • デバイスに MF ボタンが 2 つある場合は、ボタンが KEYCODE_STEM_1 KEYCODE_STEM_2 にマッピングされます。
  • デバイスに MF ボタンが 3 つある場合は、ボタンが KEYCODE_STEM_1KEYCODE_STEM_2KEYCODE_STEM_3 にマッピングされます。

次のサンプルコードは、使用可能なボタンの数を取得する方法を示しています。

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
    }
    

ボタンの位置を確認する

ウェアラブル サポート ライブラリには、ボタンの位置を示す次の 2 つの API が用意されています。

注: ボタンとその機能について説明する場合、テキスト記述子は使用せず、代わりにビジュアル インジケーターを使用することをおすすめします。ただし、ボタンについて説明する方が理にかなっている場合もあります。

上記のメソッドは、簡単な説明用に設計されたものです。これらの API がアプリのニーズを満たさない場合は、WearableButtons.getButtonInfo() API を使用して画面上のボタンの位置を取得し、独自の方法で処理することもできます。これらの API について詳しくは、Wear API リファレンスをご覧ください。