LoginSignup
8
8

More than 5 years have passed since last update.

戻るボタンを押した時にホーム画面に戻る方法

Posted at

戻るボタンを押した時にホーム画面に戻るという実装に
少し時間がかかったので、メモ。

参考にした資料

戻るボタンのイベントを取得する方法
アプリ側でホーム画面に戻る方法

本題

戻るボタンを押した時のイベントを取得方法

戻るボタンのイベントを取得するためには、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()を呼び出すようにしたほうがいいと思う。

以上。

8
8
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
8