在新任务中启动单个活动

时间:2015-12-07 03:02:21

标签: android android-intent android-activity

我有一个应用程序在后台运行服务(音频播放器),并在运行时显示正在进行的通知。当用户点击通知时,我想打开播放器活动而不显示在最近的列表中,而不将应用程序的其余部分放在前面,所以当用户按下后退按钮时,他们会直接进入他们以前使用的应用程序,无论如何。我尝试了三种不同的方法,但没有一种能很好地运作。

  1. 使用FLAG_ACTIVITY_NEW_TASK启动意图。如果存在任务,则将其带到前面。当用户按下后退按钮时,玩家活动结束并显示所述任务中的先前活动,而不是在点击通知时返回到前景中的应用程序。
  2. 使用以下标志启动意图:FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_MULTIPLE_TASK | FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS。现有任务未被带到前面,后退按钮按预期工作。但是,在此活动完成后,应用程序将完全从最新列表中消失。恢复它的唯一方法是从启动器图标启动它,它将现有任务带到前台,就像从最近打开一样。
  3. 使用以下标志启动意图:FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_MULTIPLE_TASK | FLAG_ACTIVITY_NO_HISTORY。活动在新任务中开始,但所述任务将替换最近列表中的主要任务。添加FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS使其行为与以前的情况完全相同。
  4. 有没有正确的方法来进行这样的导航,或者我是否应该放弃尝试并让它将整个现有任务带到前面,并在其上启动玩家活动,如案例1中所示?

4 个答案:

答案 0 :(得分:0)

你是否方便将launchMode声明为" singleInstance"在清单文件中的此活动标记内?我想这可能对你有所帮助。但我不确定。我可以试试

答案 1 :(得分:0)

也许您可以尝试将launchmode作为清单中notificationActivity的标记;

android:launchMode="singleInstance"

答案 2 :(得分:0)

你应该尝试新的以文档为中心的API:

Adding Tasks to the Recents Screen

答案 3 :(得分:0)

我实际上找到了正确的方法:将taskAffinity属性添加到清单中的<activity>。通过这种方式,它不会干扰应用程序的其余部分如何显示,这正是我想要实现的目标。