1

我有一个 Android 应用程序,我希望其他应用程序能够通过意图启动。这允许其他应用程序与我的交互并提供初始输入等。

调用 App(称之为 App-A)执行以下操作:

Intent intent = new Intent("com.myapp.dosomething");
intent.putExtra("com.myapp.value1", "1.25");
intent.putExtra("com.myapp.value2", "bob");

startActivity(intent);

我的活动从意图过滤器开始:

<intent-filter>
<action android:name="com.myapp.dosomething" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>

如果用户通过我的应用程序的正常流程,一切正常。用户做一些事情,然后当我知道用户完成时,我在我的活动上调用 finish()。一切都是花花公子。

但是,如果在我的应用程序中执行操作的部分过程中,用户点击主页按钮而不是完成任务,我们最终会遇到一个主要问题。如果他们尝试从启动器重新启动 App-A,则会弹出我的应用程序。如果不强制终止我的应用程序,用户将永远无法返回 App-A。更糟糕的是,我的应用程序专门设计为在启动之间不保留任何数据,并且当以这种方式重新启动时,它也不会获得最初传入的任何额外数据,因此我的应用程序无法知道另一个应用程序是还在等我的。

如何进行设置以使 App-A 不会坐在那里等待我的应用程序?无论我的应用程序做什么,它都应该能够继续运行。如果我的应用程序崩溃或没有返回值,我不希望调用应用程序永远挂起。

有任何想法吗?

谢谢。

4

2 回答 2

0

最后:如果您的应用程序启动并且没有发送必要的数据,那么您描述的场景可能刚刚发生,所以立即完成并指示错误(假设您的应用程序是使用 startActivityForResult 调用的,您可以发送一个指示错误的结果代码)。您不再需要询问您的内容,等待您的应用程序无论如何都不会获取其数据,并且用户可能会被带回他们期望的应用程序。

最后:调用应用程序应添加标志:

    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);

此标志从活动堆栈中清除被调用的应用程序,以便用户在下次重新启动调用应用程序时到达预期的位置。

基本上,您可以尽力处理这种情况,但调用应用程序有责任添加此标志并适当地处理这种情况。

于 2012-04-04T00:38:42.710 回答
0

在对此进行了很多混乱之后,似乎启动标志之类的东西确实无济于事。唯一真正的解决方案是跟踪我的应用程序何时从外部启动,并确保在这种情况下应用程序暂停时始终关闭完成。

通过始终完成 onPause,我确保调用应用程序始终得到某种响应。在操作中断的情况下,我只是将“取消”的结果传回。

于 2012-04-10T16:07:20.897 回答