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); 

谢谢

  • 如何使用意向filter捕获Android限制到特定URL的意图?
  • 错误:Theme.Translucent&FLAG_ACTIVITY_REORDER_TO_FRONT
  • 有什么方法可以启动我的应用程序?
  • Android - 在活动休闲期间保存意图?
  • 从通知启动应用程序将其从最近的应用程序历史中删除
  • 将应用程序与Googlesearch结果和Chrome集成
  • “三星应用程序”是否支持URIschemeredirect到特定的应用程序?
  • 在Android中发送电子邮件时,在StartActivity()中使用Intent.createChooser()的目的是什么?
  • 查看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()”。