ページ

2013/08/24

[Android]Backボタンを押されたことを検知する

[Android]Homeボタンを押されたことを検知するのおまけ。

戻るボタンを押した時に onKeyDown や onKeyUp でイベント拾って
処理することあるけど Android 2.0 以前では onKeyDown で finish() して
Android 2.0 以降は onKeyUp で finish() する処理になっていたみたい。
Activity#onKeyDown(int, KeyEvent) | Android Developers
Activity#onKeyUp(int, KeyEvent) | Android Developers
参考
ハードキーフックの方法 - 明日の鍵

確実なのはシステムに KeyEvent が送られる dispatchKeyEvent で何かを処理する事。
@Override
public boolean dispatchKeyEvent(KeyEvent event){
    if(event.getKeyCode() == KeyEvent.KEYCODE_BACK){
        // 戻るボタンが押された!
    }
    return super.dispatchKeyEvent(event);
}
キーダウンとキーアップの両方で呼ばれるので注意。
Activity#dispatchKeyEvent(KeyEvent) | Android Developers

戻るボタンのみイベントが取れれば良ければ onBackPressed が一番簡単。
@Override
public void onBackPressed(){
    super.onBackPressed();
}
super.onBackPressed(); は finish() するだけのメソッドなので
こいつをコメントアウトして好きな処理を書けば良い。
Activity#onBackPressed() | Android Developers

ちなみに呼び出し順は以下のとおり。
Activity#dispatchKeyEvent
Activity#onKeyDown
Activity#dispatchKeyEvent
Activity#onKeyUp
Activity#onBackPressed