戻るボタンを押した時にホーム画面に戻るという実装に
少し時間がかかったので、メモ。
#参考にした資料
・戻るボタンのイベントを取得する方法
・アプリ側でホーム画面に戻る方法
#本題
###戻るボタンを押した時のイベントを取得方法
戻るボタンのイベントを取得するためには、Activity.onKeyDown(int, keyEvent)メソッドをオーバーライドすればいい。
第1引数のkeyCodeには、何のボタンが押されているかが入っているので、これを条件分岐して、戻るボタンを押した時の処理を書く。
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_BACK) {
// 戻るボタンの処理
return super.onKeyDown(keyCode, event);
} else {
return super.onKeyDown(keyCode, event);
}
}
###ホーム画面に移動させる方法
Intentを発行して、ホームアプリに移動するようにする。
Intent発行の例↓
Intent homeIntent = new Intent(Intent.ACTION_MAIN);
homeIntent.addCategory(Intent.CATEGORY_HOME);
homeIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
this.startActivity(homeIntent);
下記の2つの部分がホーム画面に行くために必要なインテントらしい。
Intent homeIntent = new Intent(Intent.ACTION_MAIN);
homeIntent.addCategory(Intent.CATEGORY_HOME);
この2文でなぜホーム画面に行くのか、詳しくは、よくわからなかったので、どなたか教えてください。
もし、わかったら追記します。
###2つの処理を組み合わせる
上記に書いたものを組み合わせると戻るボタンを押した時にホーム画面に戻るようになる。
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
Intent homeIntent = new Intent(Intent.ACTION_MAIN);
homeIntent.addCategory(Intent.CATEGORY_HOME);
homeIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Timer.this.startActivity(homeIntent);
return super.onKeyDown(keyCode, event);
} else {
return super.onKeyDown(keyCode, event);
}
}
これを実装したいActivityに記せば、戻るボタンを押してた時に、ホーム画面に戻るようになります。
#まとめ
詳しい仕組みはさておき、意外と簡単に実装できることがわかった。
これを実装すれば、戻るボタンを押してもonDestroy()メソッドも呼ばれることはなく、Activityが破棄されることはない。
ただ、どこかでFinish()を呼び出すようにしたほうがいいと思う。
以上。