11

URLフィルターインテントとともに、他のいくつかのアクティビティから起動できるアクティビティが1つあります。

このアクティビティでは、アクションバーのホーム アイコンを戻るボタンとして使用し、ユーザーを前のアクティビティに戻します (「ホーム」アクションとしてではありません)。とりあえず、finish() 関数を呼び出してこれを行います。これは、アプリケーション内から作業する場合にうまく機能します。

ただし、URL フィルター インテントによってアクティビティを起動する場合は、ホーム アイコンでユーザーをメイン アクティビティに移動させたいと考えています。明らかに、finish() を呼び出すと、アクティビティが閉じられます。

私の質問は、アプリケーション スタックが空かどうかを確認し、真の場合はメイン アクティビティを起動する方法はありますか? それとも、これを間違った方法で攻撃していますか?

4

1 に答える 1

16

アプリが URL インテント フィルターを介して起動され、独自のタスクを作成する場合は、次を使用できます。

if (isTaskRoot()) {
    // This activity is at root of task, so launch main activity
} else {
    // This activity isn't at root of task, so just finish()
}

編集:別の可能な方法を追加

アプリが URL インテント フィルターを介して起動されたときに既存のタスクで起動された場合、次のようなことができます。

アプリケーションの他のアクティビティからアクティビティを起動するときは、次のようにインテントに EXTRA を追加します。

Intent intent = new Intent(this, MyActivity.class);
intent.putExtra("internal", "true");
startActivity(intent);

アクティビティが起動されると、次のように、インテント内の EXTRA の有無をチェックして、内部で起動されたか、URL インテント フィルターを介して起動されたかを判断できます。

Intent intent = getIntent();
if (intent.hasExtra("internal")) {
    // Launched internally
} else {
    // Launched via intent-filter
}
于 2012-07-20T11:44:44.867 に答える