出于学习目的,我正在制作一个像应用程序一样的快捷启动器。目的很简单;在我的应用程序中,用户选择一些更好的应用程序,然后点击其中一个启动它。
在启动应用程序时搜索适用于FLAGS
的{{1}}后,这是我的代码:
intent
虽然这适用于某些应用程序,但对其他应用程序来说却很奇怪。
问题是,对于某些应用程序,如果应用程序已在运行;而不是恢复到以前的状态,它重新启动它的主要活动,就像它从未使用过一样。示例是Android的默认 Messaging 应用程序,设置应用程序。
对于其他人来说,它是第一次重启,然后开始恢复。 对于 Whatsapp , Adobe 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);
答案 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);
此外,setAction
和addCategory
也不需要,因为这些应该由getLaunchIntentForPackage
完成。
编辑:
您可以使用活动管理器获取正在运行的任务并恢复它们。
但是,从Lollipop开始禁用getRunningTasks
。
http://developer.android.com/reference/android/app/ActivityManager.html
这个方法在API级别21中已弃用。从LOLLIPOP开始,这个 方法不再适用于第三方应用程序: 引入以文档为中心的最近意味着它可以泄漏人 给呼叫者的信息。为了向后兼容,它仍然会 返回其数据的一小部分:至少是调用者自己的任务, 可能还有一些其他的任务,例如家里已知的不是 敏感。