启动第三方应用程序会重新启动它而不是恢复

时间:2015-09-04 01:51:09

标签: android launcher

出于学习目的,我正在制作一个像应用程序一样的快捷启动器。目的很简单;在我的应用程序中,用户选择一些更好的应用程序,然后点击其中一个启动它。

在启动应用程序时搜索适用于FLAGS的{​​{1}}后,这是我的代码:

intent

虽然这适用于某些应用程序,但对其他应用程序来说却很奇怪。

问题是,对于某些应用程序,如果应用程序已在运行;而不是恢复到以前的状态,它重新启动它的主要活动,就像它从未使用过一样。示例是Android的默认 Messaging 应用程序,设置应用程序。

对于其他人来说,它是第一次重启,然后开始恢复。 对于 Whatsapp Adob​​e Reader 等应用程序。

从其他发射器启动应用程序时没有这样的问题。

自从过去两天以来,我一直在搜索整个互联网,并尝试了来自不同博客的大量解决方案以及SO本身提出的数百个类似问题,但都没有奏效。我甚至查看了默认 Android启动器的代码,BTW完美地启动了应用程序, 但没有成功。

我知道这是一个超级重复的问题,但我只是问,因为我尝试过的解决方案都没有为我工作。谢谢你的帮助。

修改

如果它与清单有关,请点击这里,

 Intent i = getPackageManager().getLaunchIntentForPackage(pkgName);
            i.setAction(Intent.ACTION_MAIN);
            i.addCategory(Intent.CATEGORY_DEFAULT);
            i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                            | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);

 if (i != null) startActivity(i);

1 个答案:

答案 0 :(得分:0)

尝试删除中间的行,如下所示

 Intent i = getPackageManager().getLaunchIntentForPackage(pkgName);

 if (switchIntent != null) startActivity(i);

问题可能是由以下行引起的

i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                            | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);

此外,setActionaddCategory也不需要,因为这些应该由getLaunchIntentForPackage完成。

编辑:

您可以使用活动管理器获取正在运行的任务并恢复它们。

但是,从Lollipop开始禁用getRunningTasks

http://developer.android.com/reference/android/app/ActivityManager.html

  

这个方法在API级别21中已弃用。从LOLLIPOP开始,这个   方法不再适用于第三方应用程序:   引入以文档为中心的最近意味着它可以泄漏人   给呼叫者的信息。为了向后兼容,它仍然会   返回其数据的一小部分:至少是调用者自己的任务,   可能还有一些其他的任务,例如家里已知的不是   敏感。