web-dev-qa-db-ja.com

プログラムでホーム画面に移動する

ユーザーがボタンをクリックしたときにAndroidでプログラムでホーム画面に移動したいのですが、どうすればよいですか?

74
Sri Sri

これは Intent を使用して実行できます。

Intent startMain = new Intent(Intent.ACTION_MAIN);
startMain.addCategory(Intent.CATEGORY_HOME);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(startMain);

このインテントは、ユーザーが定義したランチャーアプリケーションを起動します。ユーザーがこれを予期していない場合、アプリケーションがクラッシュしたように見えるため、これに注意してください。

アプリで終了ボタンを作成したい場合は、Androidの exit Buttons に関するこの記事をご覧ください。

162
Janusz

1行のソリューション

moveTaskToBack(true); //activity.moveTaskToBack(true);

ホームボタンが押されると動作します

21
Xar E Ahmer

ヤヌスの答え は素晴らしい。

私が追加したいのは、コメントするには長すぎますが、現在のアクティビティを参照せずにホーム画面に移動できることです。

Januszのコードは、startActivity()のためにアクティビティまたはフラグメントから呼び出す必要があります。

これを回避するために、アプリケーションファイルにアプリケーションコンテキストへの静的参照を保存できます。

public class YourApplication extends Application
{

    private static Context mAppContext;

    public void onCreate()
    {
        super.onCreate();
        ...
        YourApplication.mAppContext = getApplicationContext();
    }

    public static Context getContext()
    {
        return mAppContext;
    }

}

現在、アクティビティ、フラグメント、または現在のアクティビティへの参照を持つ他のクラスだけでなく、アプリ内の任意のクラスからデバイスのホーム画面にユーザーを送信できます(これが良いか悪いかを判断できます)。

Intent startMain = new Intent(Intent.ACTION_MAIN);
startMain.addCategory(Intent.CATEGORY_HOME);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
YourApplication.getContext().startActivity(startMain);
10
Peter Ajtai
startActivity((new Intent(Intent.ACTION_MAIN)).addCategory(Intent.CATEGORY_HOME).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
0
rm -rf star

Android開発者 サイトから

これらの追加パラメーターを使用してインテントとして指定できる他の操作の例を次に示します。

* ACTION_MAIN with category CATEGORY_HOME -- Launch the home screen.
0
st0le