Android从Widget启动现有应用实例

时间:2012-06-25 03:34:33

标签: android android-activity widget instance launchmode

我有一个包含多个活动的应用...所以假设用户正在导航活动堆栈A-> B-> C.然后按HOME按钮。现在,当用户点击Widget时,我只想将我的应用程序的现有/当前实例带到前台。我不想要应用程序的新实例。我希望活动C回到前台。

我尝试将launchMode发送到"singleTask" | "singleInstance",但这并不能解决我想要的要求,因为它会清除当前实例并创建一个带有活动A的新实例。

任何想法如何解决这个问题?

非常感谢!

3 个答案:

答案 0 :(得分:2)

我设法找到了解决方案。我设置了专门的启动模式....

android:launchMode="singleInstance"

每次用户再次点击窗口小部件或应用程序图标时,都会启动默认活动A.要在应用的最后位置打开应用,请在onCreate()课程的MainActivity方法内查看isTaskRoot()。如果为false,请调用finish(),并且不会显示活动A(MainActivity),应用程序将打开到活动B中的位置。

答案 1 :(得分:2)

使用“singleInstance”并不是一个好主意(出于很多原因)。 这是一种更好的方法 - 来自您的小部件意图处理程序:

Intent yourActivity = new Intent(context, YourActivity.class);
yourActivity.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
context.startActivity(yourActivity);

您无需添加CLEAR_TOP来召回活动C,但如果您想携带A或B,则需要它。

我只是发帖,因为在大约10个以上的类似帖子中,没有人真正指出了正确的做法。

http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_CLEAR_TOP - 最后一段。

答案 2 :(得分:-1)

尝试将此添加到您的意图

intent.setFlags( Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);