Android 4:无法通过刷卡解除通知

时间:2012-05-23 10:46:28

标签: android android-notifications

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

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中,除了滑动到解除操作不起作用外,一切正常。通知略微偏向一侧,然后反弹并反弹。 任何的想法? 感谢。

3 个答案:

答案 0 :(得分:13)

您无法刷掉通知,因为它处于“ONGOING”状态。

首先是解决方案:

用以下代码替换设置标志:

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

默认值用于defaults-section,flags-section的标志。

现在它正在进行的原因是什么?

您可能已经知道通知的标志(和默认值)由bitwise operation设置。意味着每个标志都有一个常量值,它是2的幂。添加它们会产生一组标志的唯一编号,这样可以快速计算实际设置的标志。

Notification.DEFAULT_VIBRATENotification.FLAG_ONGOING_EVENT 具有相同的 2 的含义值。

答案 1 :(得分:5)

您应该使用 setOngoing (boolean ongoing)

  

设置这是否是"正在进行的"通知。正在进行的通知   不能被用户解雇,因此您的应用程序或服务必须   照顾取消它们。它们通常用于表示a   用户积极参与的后台任务(例如,播放   音乐)或以某种方式待决,因此占用设备   (例如,文件下载,同步操作,活动网络连接)。

您可以使用

.setOngoing(false);

答案 2 :(得分:0)

只需在发出通知时插入此行...

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