Android アプリを作っていて、BACKキーを押した時の処理を書くことがある。
onKeyDown をオーバライドして、よく、KeyEvent.KEYCODE_BACK かつ、KeyEvent.ACTION_DOWN をチェックするが、
BACKキー長押しをハンドルしないと書いている処理によっては思わぬ動作をしてしまう。
これを回避するには、KeyEvent から getRepeatCount() を求めて繰り返しの発生なのかをチェックする。
@Override
public boolean onKeyDown(int keyCode,KeyEvent event){
if (event.getRepeatCount() > 0) return true;
if (keyCode==KeyEvent.KEYCODE_BACK && event.getAction()==KeyEvent.ACTION_DOWN){
// BACKキーの処理
return true;
}
return super.onKeyDown(keyCode,event);
}
そうではなくて、ACTION_UP にした方がいいのかも。。。
@Override
public boolean onKeyDown(int keyCode,KeyEvent event){
if (keyCode==KeyEvent.KEYCODE_BACK && event.getAction()==KeyEvent.ACTION_UP){
// BACKキーの処理
return true;
}
return super.onKeyDown(keyCode,event);
}