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


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

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

boolean onKeyLongPress (int keyCode, KeyEvent event)

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

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

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

// 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