我有两个应用程序,我将其称为应用程序A和应用程序B.应用程序B是单个任务应用程序,通常,如果您从主屏幕启动此应用程序并使用“返回”按钮,则不允许返回主屏幕。现在假设app A需要使用Intent调用app B.如果用户然后使用应用B中的后退按钮,我真的希望他们返回到应用A.但是由于我覆盖了后退按钮,因此无法使用后退按钮返回应用A.
我如何返回应用A,但确保应用A在应用A调用时运行时仍在运行?如果app A在app A调用它时没有运行,那么当按下Back按钮时,app B应该关闭(被破坏)。
我使用的是Android 2.2
更新:
我尝试了以下内容:
@Override
public void onBackPressed()
{
try
{
if (this.returnToClient)
moveTaskToBack (true);
this.returnToClient = false;
}
catch (Exception ex)
{
}
}
如果调用应用程序通过检查传入的某些包数据启动活动,则将returnToClient设置为true。
现在,如果按下“返回”按钮,应用B将移至后台,应用A将进入前台。看起来不错。现在,如果我按下主页按钮然后启动应用程序B,应用程序B只会从中断处继续。也不错。现在不好的部分。如果我长按主页按钮以显示历史记录列表,然后点击应用程序B的图标,onNewIntent方法将被调用完全相同,并且传入相同的数据,就像app A启动了活动。所以我猜测的是,Android会从主屏幕启动应用程序,而不是从历史列表中启动应用程序。为什么?我不知道。似乎历史记录与谁最后启动活动并将捆绑数据作为历史记录的一部分持久存在。这很奇怪,它会导致不必要的行为,使应用程序B看起来像是从应用程序A调用。
答案 0 :(得分: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的现有任务。