我有一个活动,可以从我的父活动和其他应用程序通过意图过滤器(即 ACTION_VIEW)调用。
当我在我的活动中调用完成()时,如何返回正确的调用者?
即:其他应用程序->我的活动->完成()->其他应用程序
目前,如果我的主要活动仍在运行,finish() 将返回到我的主要活动,尽管它是从其他应用程序调用的。
我有一个活动,可以从我的父活动和其他应用程序通过意图过滤器(即 ACTION_VIEW)调用。
当我在我的活动中调用完成()时,如何返回正确的调用者?
即:其他应用程序->我的活动->完成()->其他应用程序
目前,如果我的主要活动仍在运行,finish() 将返回到我的主要活动,尽管它是从其他应用程序调用的。
如果你开始一个活动,startActivityForResult(Intent)
那么你可以获得第二个活动,它开始第一个活动getCallingActivity()
。
如果您在活动上调用完成方法,您将返回到历史堆栈中最顶层的活动。默认情况下,它是您访问的上一个活动。
例如:
主要 > A > B
如果在 Activity B 上调用了finish,您将返回到 Activity A。如果在 Activity A 上调用了finish,但 Activity B 仍然存在,您将留在 Activity B,因为它是历史堆栈中最顶层的 Activity。如果在 Activity B 上调用了完成,但由于某种原因 Activity A 不在您的历史堆栈中(很可能,如果您指定 Activity A 不得保存在历史堆栈中),您将返回到 Activity Main 而不是 Activity B .
当您想调用子活动时,请使用 startactivityforresult()。你会回到好的。
阅读任务- 通过从不同的任务(/应用程序)调用活动,您将现有任务带到前台,这可能包括您不想要的后台堆栈中的其他活动。我建议指定可以从其他应用程序启动的 Activity的android:taskAffinity 。由于这将确保此 Activity 将是 Task 中唯一的一个,因此无论它是从它自己的应用程序中启动还是从另一个应用程序启动都没有关系。
编辑:Tasks 链接中的图 4 显示了您的情况。