清除旧活动,使其不显示新活动点击

时间:2013-11-25 21:53:19

标签: android android-intent android-activity notifications

所以我所拥有的是状态栏中的通知,当用户点击该通知时会显示没有标题的活动,以复制对话框。但我有一个问题。如果我打开应用程序,只需单击主页按钮,然后单击状态栏中的通知。它将应用程序的主要活动与堆叠在顶部的notificatoins活动结合起来。我想要做的是当我点击通知时它会清除所有底部活动,以便永远不会发生。这是我用来启动通知活动的代码

// Send Notification
Intent intent1 = new Intent(this, Dialog.class);
intent1.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent pIntent = PendingIntent.getActivity(this, 0, intent1, 0);
NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.ic_stat_quick_tweet_icon)
.setContentTitle("Dialog")
.setContentText("Touch for more options")
.setWhen(System.currentTimeMillis())
.setContentIntent(pIntent)
.setAutoCancel(false).setOngoing(true);
NotificationManager nm = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);
Notification notif = builder.getNotification();
nm.notify(1, notif);

1 个答案:

答案 0 :(得分:1)

这不起作用。你写过:

Intent intent1 = new Intent(this, Dialog.class);
intent1.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

这说的是“如果活动Dialog已经存在于任务堆栈中,请在开始Dialog活动之前清除(完成)堆栈中所有活动。否则(如果堆栈中已经没有Dialog的实例)只需启动Dialog活动“。所以你看到的是你的Dialog活动被置于任务堆栈中已经存在的其他活动之上。

如果您希望此通知从任务堆栈中删除所有活动,然后开始Dialog活动,建议您执行以下操作:

像这样创建通知:

Intent intent1 = new Intent(this, MyRootActivity.class);
intent1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent1.putExtra("startDialog", true);

在这种情况下,MyRootActivity必须是任务的根活动(即:清单中有ACTION = MAIN和CATEGORY = LAUNCHER的那个)。

onCreate() MyRootActivity执行此操作:

super.onCreate(...);
if (getIntent().hasExtra("startDialog")) {
    // User has selected the notification, so we show the Dialog activity
    Intent intent = new Intent(this, Dialog.class);
    startActivity(intent);
    finish(); // finish this activity
    return; // Return here so we don't execute the rest of onCreate()
}
... here is the rest of your onCreate() method...

希望这很清楚。