2014-06-05 32 views
1

我正在开发一个应用程序,它将处理来自外部应用程序的调用,向用户请求一些数据并返回一个小结果。我已经尝试使用意图和startActivityForResult进行交互。应用程序之间的活动交互

问题是我的应用程序有一个身份验证过程,如果我使用登录活动处理呼叫,并且用户已在我的应用程序中进行身份验证,则必须关闭登录活动,打开要求对于数据,我失去了使用setResult将结果返回给外部应用程序的机会。

是否有任何方式将结果发送回调用者应用程序,而不是处理意图过滤器的活动?

另外我被问到是否有可能在不同的任务上调用我的应用程序,即没有将我的应用程序的活动作为调用者应用程序的同一进程的一部分。

回答

2

你可以使用结果转发来做你想做的。如果ActivityA使用startActivityForResult()调用ActivityB,并且ActivityB需要启动ActivityC以实际获取数据,则ActivityB可以使用包含Intent.FLAG_ACTIVITY_FORWARD_RESULTIntent调用startActivity()。当ActivityC完成时,结果直接返回给ActivityA(假设ActivityB也已完成)。这回答了你的问题的第一部分。

在你问题的第二部分,你问

...可以调用上不同的任务我的应用程序,也就是没有我的应用程序的活动是主叫方的同一进程的一部分应用程序。

您使用了术语“任务”和“过程”,就好像它们是相同的东西。在Android中,它们不是一回事。

  • “进程”是一个操作系统进程。通常,如果ActivityA和ActivityB不共享相同的操作系统用户标识(即:它们不是来自同一个包或来自同一应用程序),则这两个活动将运行在不同的操作系统进程中。

  • “任务”是一系列活动,可能来自完全不同的应用程序/软件包,并可能在完全不同的操作系统进程中运行。如果要使用startActivityForResult()以便将数据从一个活动传回另一个活动,则两个活动必须在相同的任务中运行,尽管它们不需要在相同的操作系统进程中运行。

+0

首先感谢您的快速回答,并对过程和任务的错误感到抱歉,我的意思是运行两个不同的任务。为了实现这一点,我正在考虑使用广播接收器从我的应用程序发送它,完成工作后,并允许调用者处理它。 – Victor

+0

当然,您可以通过使用广播意图在活动之间进行沟通。这将适用于不同的任务。但是,使用多任务的用户导航可能会非常棘手,特别是如果用户按下HOME按钮并尝试返回到应用程序(最近任务列表中将有2个任务),并且用户可能不知道哪个是正确的一个返回。你只需要牢记这一点。 –

相关问题