ハードウェアキーの長押しを検知する


タッチパネルの長押しを検知する方法は「タッチパネルのダブルタップや長押しを検出する」で紹介しましたが、
ハードウェアキーも長押しを検知することが可能です。

ハードウェアキーの長押しを検知するにはandroid.view.KeyEvent.Callbackクラス
定義されているonKeyLongPressメソッドを利用します。

1
boolean onKeyLongPress (int keyCode, KeyEvent event)

onKeyLongPressメソッドのパラメータ
keyCode : 長押ししていたキーのキーコード
event : 長押ししていたキーのキーイベント

詳しくは続きからご覧下さい。

onKeyLongPressメソッドの使い方ですが、まずonKeyLongPressメソッドをオーバーライドします。
するとハードウェアキーが長押しされることでオーバーライドしたonKeyLongPressメソッドが呼び出されるように
なりますので、長押しされたキーのキーコードに応じて処理を振り分けます。
以下はバックキーと検索キーの長押しに対してToastを表示するサンプルです。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// onKeyLongPressメソッドをオーバーライドする
@Override
public boolean onKeyLongPress(int keyCode, KeyEvent event) {
    // バックキーの長押しに対する処理
    if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
        Toast.makeText(this, "バックキーが長押しされました!", Toast.LENGTH_SHORT ).show();
        return true;
    // 検索キーの長押しに対する処理
    } else if (event.getKeyCode() == KeyEvent.KEYCODE_SEARCH) {
        Toast.makeText(this, "検索キーが長押しされました!", Toast.LENGTH_SHORT ).show();
        return true;
    }
 
    // バックキー、検索キー以外の長押しはスルー
    return super.onKeyLongPress(keyCode, event);
}

なお、例外としてメニューキーやホームキーは長押しを検知することができません。
上記のサンプルコードをメニューキーやホームキーに適用しても、メニューキーの場合にはソフトウェアキーボード、
ホームキーの場合にはアプリケーションの起動履歴が表示されてしまいますので注意が必要です。

One Comment