10

我有一些代码可以创建一些通知,这真的很基础。

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 中,除了滑动关闭操作不起作用外,一切正常。通知稍微偏向一边,然后粘住并反弹回来。任何想法?谢谢。

4

3 回答 3

14

你不能刷掉你的通知,因为它处于“正在进行”状态。

首先解决方案:

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

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

默认值用于 defaults-section,flags 用于 flags-section。

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

您可能已经知道通知的标志(和默认值)是由按位操作设置的。意味着每个标志都有一个常数值,它是 2 的幂。将它们相加会导致一组标志的唯一编号,这使得计算实际设置的标志变得非常快。

Notification.DEFAULT_VIBRATENotification.FLAG_ONGOING_EVENT 具有相同的常量值2

于 2013-01-17T06:55:58.580 回答
7

你应该使用setOngoing (布尔持续)

设置这是否是“持续”通知。用户不能关闭正在进行的通知,因此您的应用程序或服务必须注意取消它们。它们通常用于指示用户正在积极参与的后台任务(例如,播放音乐)或以某种方式挂起并因此占用设备(例如,文件下载、同步操作、活动网络连接)。

您可以使用

.setOngoing(false);
于 2016-03-16T12:19:44.453 回答
1

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

// Will show lights and make the notification disappear when the presses it
notification.flags == Notification.FLAG_AUTO_CANCEL | Notification.FLAG_SHOW_LIGHTS;
于 2014-12-19T07:18:34.167 回答