2016-05-12 51 views
0

仅使用显示GCM通知(而不是使用onMessageReceived()和GcmListenerService)的默认方式,可以让活动堆栈保持原样并仅将应用程序置于前台当通知被触动?我希望获得与应用程序图标被触摸时相同的行为。目前,每次触摸通知时都会启动一项新活动。单击通知时保留活动堆栈

编辑:

下面是详细的情况。我已阅读该文档,但仍无法获得所需的行为。假设我的堆栈如下所示:

Activity B 
Activity A 

活动B当前处于最高活动状态。当用户再次按下圆形按钮然后再按下应用程序图标时,同一个堆栈被激活(恢复)。

现在,在这种情况下,在通知触摸时我得到这个:

Activity A 
Activity B 
Activity A 

但我想只是保留此:

Activity B 
Activity A 

我已经尝试了所有launchMode变种,但有没有成功。

回答

1

它与您的活动设置方式有关。例如,你可以在你的清单中的活动为您singleTop活动:

<activity 
... 
    android:launchMode="singleTop" 
... 
/> 

这样当有此活动的新Intent,Android操作系统不会让你活动的新实例,而是拉起现有实例并通过onNewIntent(Intent)函数传递新的Intent(使其工作,您应该在您的活动中重写该方法)。

有更多的方法来做到这一点,检查出documentation(“使用清单文件”部分),看看什么是最适合您的方案。

+0

谢谢!我已阅读该文档,但仍无法获得所需的行为。假设我的堆栈如下所示: 活动B 活动A 活动B当前处于顶部并处于活动状态。当用户再次按下圆形按钮然后再按下应用程序图标时,同一个堆栈被激活(恢复)。 现在,在这种情况下,在通知触摸时我得到这个: 活动A 活动B 活动A 但我想只是保留此: 活动B 活动A 我试着所有launchMode变体,但没有成功。 – user1195883

+0

我不知道我明白,你的活动顺序没有意义 - 但看看你可以设置一些意图标志,如'yourIntentName.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);':https://developer.android。 com/reference/android/content/Intent.html#FLAG_ACTIVITY_CLEAR_TASK – C0D3LIC1OU5

+0

如果这个答案对你有帮助,请接受它作为正确的答案。 – C0D3LIC1OU5