2011-02 / 2011-02-17

前のエントリ: find|xargsでスペース込みのパスが有る場合 [command]
次のエントリ: ソースからnkfインストール [cygwin]

ボリューム変更ハードキーのハンドリング
2011-02-17-2 / カテゴリ: [Android] / [permlink]

動作確認用アプリなんかで手抜きをしたい^a^k上下スクロールとかズームイン/アウトなんかにキー操作を割り当てしたい場合に。
標準だと「押す:ボリューム変更&UI表示 / 離す:通知音を鳴らす」という動作のため、KEYCODE_VOLUME_UPとKEYCODE_VOLUME_DOWNの両方をフックする必要がある。

というわけで、こんな感じ。
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
	switch (event.getAction()) {
	case KeyEvent.ACTION_DOWN:
		switch (event.getKeyCode()) {
		case KeyEvent.KEYCODE_VOLUME_UP:
			// ここにボリュームupが押されたときに走らせたい処理
			return true;
			
		case KeyEvent.KEYCODE_VOLUME_DOWN:
			// ここにボリュームdownが押されたときに走らせたい処理
			return true;
			
		default:
			break;
		}
		break;
		
	case KeyEvent.ACTION_UP:
		switch (event.getKeyCode()) {
		case KeyEvent.KEYCODE_VOLUME_UP:
		case KeyEvent.KEYCODE_VOLUME_DOWN:
			// キーが離された場合はイベントを捨てる
			return true;
		default:
			break;
		}
		break;
		
	default:
		break;
	}
	return super.dispatchKeyEvent(event);
}

Androidでキー長押しはACTION_DOWNがコールバックされまくるんだな。

参考
キーイベントに応答するには - 逆引きAndroid入門
ハードキーフックの方法 - 明日の鍵
前のエントリ: find|xargsでスペース込みのパスが有る場合 [command]
次のエントリ: ソースからnkfインストール [cygwin]

2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12

最終更新時間: 2013-05-02 16:12