Android通知在现有活动上打开

时间:2014-08-28 23:16:05

标签: java android android-activity notifications

我遇到通知意图问题。我有一个服务(服务检查消息和创建通知),它创建通知。应用程序有一个操作栏,通过幻灯片菜单用户可以在活动之间导航。

http://i.stack.imgur.com/YJXe6.png

当用户点击通知时,它会在当前活动上打开一个新活动。(就像一个独立的新实例)。我想在同一个实例中打开它们,就像用户手动导航一样(比如在B活动时点击A即可)

我当前的活动launchMode是标准的(虽然我尝试过singleTop和singleTask以及标志)

当前通知代码:

Intent i = null;
i = new Intent(this, MessagesListActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0,i, 0);
Builder notificationBuilder  = new NotificationCompat.Builder(this);
notificationBuilder.setContentTitle(title);
notificationBuilder.setContentText(msg);
notificationBuilder.setSmallIcon(R.drawable.speech_bubble_orange);
notificationBuilder.setContentIntent(contentIntent);
notificationBuilder.setAutoCancel(true);
NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
Notification notification = notificationBuilder.build();
notificationManager.notify(Constants.UNREADMESSAGESNOTIFICATIONID,notification); 

感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

我解决了这个问题。通过这种组合,新启动的活动可以清除堆栈。我也没有改变启动模式(仍然标准)

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);

答案 1 :(得分:0)

在清单中,您必须将活动标记为单个实例,并保留singleTask

android:launchMode= "singleTask" | "singleInstance"

此外,您可能必须从意图中删除单个顶部标记。

答案 2 :(得分:0)

如果我理解正确,我认为你要找的是TaskStackBuilder。它允许您创建一个backstack,以便为Activity正在启动的PendingIntent提供正确的导航。

有关详细信息,请参阅文档here