Android 4:不能通过刷卡来解除通知

我有一些代码,创build一些通知,这是非常基本的。

int icon = R.drawable.notification; CharSequence tickerText = "Text"; long when = System.currentTimeMillis(); Notification notification = new Notification(icon, tickerText, when); Context context = getApplicationContext(); CharSequence contentTitle = "Text"; CharSequence contentText = "Text"; Intent notificationIntent = new Intent(this, RequestActivity.class); PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0); notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent); notification.flags |= Notification.DEFAULT_SOUND; notification.flags |= Notification.DEFAULT_VIBRATE; notification.flags |= Notification.DEFAULT_LIGHTS; notification.flags |= Notification.FLAG_AUTO_CANCEL; mNotificationManager.notify(notificationID, notification); 

这一切在2.1工作正常。 在4.0中,除了刷卡解除操作不起作用,它一切正常。 通知稍微向一边,然后坚持和反弹。 任何想法? 谢谢。

Solutions Collecting From Web of "Android 4:不能通过刷卡来解除通知"

您不能扫描您的通知,因为它处于“正在进行”状态。

首先解决scheme:

用以下代码replace设置标志:

 notification.defaults |= Notification.DEFAULT_SOUND; notification.defaults |= Notification.DEFAULT_VIBRATE; notification.defaults |= Notification.DEFAULT_LIGHTS; notification.flags |= Notification.FLAG_AUTO_CANCEL; 

缺省值是针对标志部分的缺省部分 – 标志。

而现在之所以这么做呢?

因为您可能已经知道通知的标志(和默认值)是按位操作设置的。 意味着每个标志都有一个2的幂的常数值。添加它们会产生一组唯一的标志,这使得计算实际设置的标志真正快速。

Notification.DEFAULT_VIBRATE和Notification.FLAG_ONGOING_EVENT具有相同的内容值2

你应该使用setOngoing(boolean进行中)

设置这是否是“正在进行中”的通知。 正在进行的通知不能被用户解雇,所以你的应用程序或服务必须注意取消它们。 它们通常用于指示用户主动参与的背景任务(例如,播放音乐)或以某种方式未决,因此占据设备(例如,文件下载,同步操作,活动networking连接)。

您可以使用

 .setOngoing(false); 

只要在进行通知时插入此行即可

 // Will show lights and make the notification disappear when the presses it notification.flags == Notification.FLAG_AUTO_CANCEL | Notification.FLAG_SHOW_LIGHTS;