我有一个Android应用,我希望其他应用能够通过意图启动。这允许其他应用程序与我的交互并提供初始输入等。
呼叫应用程序(称为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不会坐在那里等待我的应用程序?无论我的应用程序做什么,它都应该能够继续运行。如果我的应用程序崩溃,或者没有返回值,我不希望永远挂起调用应用程序。
有什么想法吗?
感谢。
答案 0 :(得分:0)
在你的结尾: 如果您的应用程序启动并且未发送必需的数据,则您描述的方案可能刚刚发生,因此立即完成并指示错误(假设您的应用程序是使用startActivityForResult调用的,您可以发送指示错误的结果代码)。你没有任何关于你的问题的背景信息,等待你的应用程序无论如何都没有得到它的数据,用户也可能被带回他们期望的应用程序。
结束: 调用应用程序应添加标志:
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
此标志清除活动堆栈中的被叫应用程序,以便用户在下次重新启动调用应用程序时到达预期位置。
基本上,您可以尽力处理这种情况,但是调用应用程序负责添加此标志并适当地处理此方案。
答案 1 :(得分:0)
经过大量的搞乱之后,似乎发射旗帜等似乎没有任何帮助。唯一真正的解决方案是跟踪我的应用程序何时在外部启动,并确保在此情况下应用程序暂停时始终关闭完成。
总是在onPause中完成我确保调用应用程序总是得到某种响应。在中断操作的情况下,我只是传回“已取消”的结果。