1

アプリAとアプリBの2つのアプリがあります。アプリBはシングルタスクアプリであり、通常、ホーム画面からこのアプリを起動して[戻る]ボタンを使用すると、に戻ることはできません。ホーム画面。ここで、アプリAがインテントを使用してアプリBを呼び出す必要があるとします。その後、ユーザーがアプリBの[戻る]ボタンを使用する場合は、本当にアプリAに戻してもらいたいのですが、[戻る]ボタンをオーバーライドしているため、[戻る]ボタンを使用してアプリAに戻ることはできません。

アプリAに戻るにはどうすればよいですか?ただし、アプリAが呼び出したときにアプリBが実行されていた場合は、アプリBが実行されたままであることを確認してください。アプリAが呼び出したときにアプリBが実行されていなかった場合、[戻る]ボタンが押されたときにアプリBはシャットダウン(破棄)されます。

私はAndroid2.2を使用しています

アップデート:

私は次のことを試しました:

  @Override
  public void onBackPressed()
  {
    try
    {
      if (this.returnToClient)
        moveTaskToBack (true);

      this.returnToClient = false;
    }
    catch (Exception ex)
    {
    }
  }

渡されるバンドルデータをチェックすることで、呼び出し元のアプリによってアクティビティが起動される場合は、returnToClientをtrueに設定します。

ここで、[戻る]ボタンを押すと、アプリBがバックグラウンドに移動し、アプリAがフォアグラウンドになります。いいね。ここで、ホームボタンを押してからアプリBを起動すると、アプリBは中断したところから再開します。また良い。今悪い部分。ホームボタンを長押しして履歴リストを表示し、アプリBのアイコンをタップすると、アプリAが開始したかのように、同じデータが渡された場合とまったく同じようにonNewIntentメソッドが呼び出されます。アクティビティ。つまり、Androidは、ホーム画面からのアプリの起動を、履歴リストからの起動とは異なる方法で処理するのではないかと推測しています。なんで?何も思いつきません。歴史は誰とでも関係しているようですアクティビティを最後に起動し、その履歴の一部としてバンドルデータを保持します。これは奇妙なことであり、望ましくない動作が発生し、アプリBがアプリAから呼び出されたように見えます。

4

1 に答える 1

1

次のように、AppAから起動されたことを示すEXTRA付きのインテントを使用してAppAにAppBを起動させます。

Intent intent = new Intent(this, AppB.class);
intent.putExtra("returnToAppA", "true");
startActivity(intent);

次に、AppBが「戻る」キーをトラップすると、AppAから起動されたかどうかを確認でき、起動された場合は、次のようにappAに戻ることができます。

Intent intent = new Intent(this, AppA.class); // Use the starting
                                              //  (root) Activity of AppA here
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

FLAG_ACTIVITY_NEW_TASKを設定すると、AppAの新しいインスタンスは作成されませんが、AppAを含む既存のタスクに戻るだけです。

于 2012-06-30T15:33:18.783 に答える