Android通知意图自行清除它

我已经阅读了很多如何创build通知消息的例子。 我想要实现的是,因为通知将由一个小部件执行,我希望点击时的通知意图清除自己,当用户点击它。我没有一个活动返回。 我的目的通知只是明确地通知,没有别的。 那么,一个意图的代码是什么,只是清除/取消自己。 下面的代码是一个由button启动的活动(不包括button代码),通知将由后台服务启动。

CharSequence title = "Hello"; CharSequence message = "Hello, Android!"; final NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); final Notification notification = new Notification(R.drawable.icon,"A New Message!",System.currentTimeMillis()); notification.defaults=Notification.FLAG_ONLY_ALERT_ONCE+Notification.FLAG_AUTO_CANCEL; Intent notificationIntent = new Intent(this, AndroidNotifications.class); PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,notificationIntent, 0); notification.setLatestEventInfo(AndroidNotifications.this, title,message, pendingIntent); notificationManager.notify(NOTIFICATION_ID, notification); 

谢谢

Solutions Collecting From Web of "Android通知意图自行清除它"

查看FLAG_AUTO_CANCEL

如果通知应该被用户点击,应该被置位的标志位应该被设置。

编辑:

 notification.flags |= Notification.FLAG_AUTO_CANCEL; 

在notification.flags中设置标志,而不是notification.defaults。

例:

 notification.flags |= Notification.FLAG_ONLY_ALERT_ONCE | Notification.FLAG_AUTO_CANCEL; 

如果您使用NotificationCompat.Builderandroid.support.v4的一部分),那么只需调用其对象的方法setAutoCancel

 NotificationCompat.Builder builder = new NotificationCompat.Builder(context); builder.setAutoCancel(true); 

有些人报告说setAutoCancel()不适合他们,所以你也可以尝试这种方式

 builder.build().flags |= Notification.FLAG_AUTO_CANCEL; 

我能看到的唯一办法就是把你的NotificationIntent指向后台Service 。 启动此服务时,将使用NotificationManager.cancel(int id)清除给定的Notification 。 该Service将自行停止。 这不是很好,也不容易实现,但我找不到任何其他的方式。

  /** Post a notification to be shown in the status bar. Obs.: You must save this values somewhere or even pass it as an extra through Intent to use it later */ notificationManager.notify(NOTIFICATION_ID, notification); /** Cancel a previously shown notification given the notification id you've saved before */ notificationmanager.cancel(NOTIFICATION_ID); 

使用setContentIntent应该可以解决你的问题:

 .setContentIntent(PendingIntent.getActivity(this, 0, new Intent(), 0)); 

例如:

 NotificationCompat.Builder mBuilder= new NotificationCompat.Builder(this) .setSmallIcon(R.drawable.notification_icon) .setContentTitle("title") .setAutoCancel(true) .setContentText("content") .setContentIntent(PendingIntent.getActivity(this, 0, new Intent(), 0)); NotificationManager notificationManager= (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.notify(0, mBuilder.build()); 

通常你可能想引导用户到相关的内容,所以可能用别的东西代替“新的Intent()”。