Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

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

参考にした資料

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

本題

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

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

以上。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away