1

我有两个应用程序,我将它们称为应用程序 A 和应用程序 B。应用程序 B 是单任务应用程序,通常,如果您从主屏幕启动此应用程序并使用返回按钮,您将无法返回主屏幕。现在假设应用 A 需要使用 Intent 调用应用 B。如果用户随后在应用程序 B 中使用返回按钮,我确实希望他们返回应用程序 A。但由于我覆盖了返回按钮,因此无法使用返回按钮返回应用程序 A。

我怎样才能返回到应用程序 A,但如果应用程序 A 调用它时应用程序 B 正在运行,那么它是否仍然在运行?如果在应用 A 调用它时应用 B 未运行,则应用 B 应在按下后退按钮时关闭(被销毁)。

我使用的是安卓 2.2

更新:

我尝试了以下方法:

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

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

如果调用应用程序通过检查传入的一些捆绑数据来启动活动,我将 returnToClient 设置为 true。

现在,如果我按下后退按钮,应用程序 B 将移至后台,应用程序 A 将移至前台。看起来不错。现在,如果我按下 Home 按钮然后启动应用程序 B,应用程序 B 就会从它停止的地方继续。也很好。现在是坏的部分。如果我长按 Home 按钮以调出历史列表,然后点击应用程序 B 的图标,则 onNewIntent 方法的调用方式与传入的数据完全相同,就好像应用程序 A 启动了活动。所以我猜测的是,Android 对待从主屏幕启动应用程序的方式与从历史记录列表中启动应用程序的方式不同。为什么?我不知道。似乎历史与谁有关最后启动活动并将捆绑数据作为该历史记录的一部分保存。这很奇怪,它会导致不需要的行为,使应用 B 看起来像是刚从应用 A 调用的。

4

1 回答 1

1

让 AppA 使用带有 EXTRA 的 Intent 启动 AppB,表明它是从 AppA 启动的,如下所示:

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 回答