所以我所拥有的是状态栏中的通知,当用户点击该通知时会显示没有标题的活动,以复制对话框。但我有一个问题。如果我打开应用程序,只需单击主页按钮,然后单击状态栏中的通知。它将应用程序的主要活动与堆叠在顶部的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);
答案 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...
希望这很清楚。