我有一个每3秒刷新一次的通知(即发送)。我已经设置了FLAG_ONGOING_EVENT标志和FLAG_NO_CLEAR标志,因此始终显示。问题是,如果是下载处于活动状态(在通知区域中显示进度条)两个通知都会不断切换位置,因为它们每隔几秒刷新一次。
如何将通知固定在列表顶部(或某个静态位置),以便每次通过调用NotificationManager.notify()
更新通知时它都会停止跳转?
修改:以下是更新通知的代码。它每三秒钟运行一次。
Notification notification = new Notification();
notification.contentView = appBarNotification; // this sets the changed notification content
notification.flags |= Notification.FLAG_ONGOING_EVENT;
notification.flags |= Notification.FLAG_NO_CLEAR;
Intent notificationIntent = new Intent();
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
notification.contentIntent = contentIntent;
notification.icon = R.drawable.icon;
nm.notify(APP_BAR_NOTIFICATION, notification);
答案 0 :(得分:19)
有一种解决方案可以完全满足您的需求。
在Notification课程中,有一个名为when的公共字段。根据API:
通知的时间戳。图标和展开的视图按此键排序。
默认行为(代码和编码器一样:)是时通知的时间戳:
notification.when = System.currentTimeMillis();
所以 - 为了保持正确的通知顺序,你需要做的就是给它一个预设的时间戳:
notification.when = previousTimestamp;
当您对所有通知执行此操作时,他们会维护其订单。我和你有同样的问题并以这种方式解决了。
答案 1 :(得分:5)
您不应继续发送通知。只需使用正在进行的事件标记,就像您已经在代码中使用的一样。其他通知可能会进入并模糊您的,但这就是Android的工作方式。
答案 2 :(得分:3)
您每次发送新通知或更新现有通知吗?你可以发布代码吗?
与此同时,您通常可以回答诸如“我可以将我的通知固定到静态位置,还是列表顶部”这样的问题,通过思考“等待,如果两个或更多程序试图将他们的通知是第一个?“并且意识到程序之间会发生的军备竞赛,因为他们更加努力地确保他们的通知是第一个,这就是为什么不支持这种功能的原因。
答案 3 :(得分:1)
自从我为Android完成代码已经有一段时间了,但如果我没记错,每当你拨打NotificationManager.notify()
时,都是因为你想通过图标移动或闪光提醒用户。但是,有一些方法可以修改您发送的实际通知。
如果有帮助,您也可以致电.cancel()
。
这是Android API文档的帮助,尽管您可能已经看过它们了:
希望有所帮助!
答案 4 :(得分:1)
有一个正在进行的事件标志。 http://developer.android.com/reference/android/app/Notification.html#FLAG_ONGOING_EVENT
您不需要Notification.FLAG_NO_CLEAR标志。
答案 5 :(得分:1)
您说您的通知会显示当前正在运行的应用列表。为什么每隔3秒重新发送一次通知?为什么不在应用列表发生变化时重新发送通知。这不会直接解决您的问题,但会大大减少它。
答案 6 :(得分:0)
通过将.setSortKey(String)添加到通知构建器,您可以使通知保持按字典顺序/按字母顺序排列。
答案 7 :(得分:-1)
仅针对遇到此问题的其他人的说明 -
Vaiden的回答解决了我的问题,我的持续通知不断跳跃。由于某些原因,它只发生在ICS 4.0.3上的应用程序中,我认为这是因为ICS处理的通知与旧版本不同。还要注意 - 在平板电脑上,没有“正在进行”与正常通知部分相比,如旧版本(姜饼)。订单保留,但没有分类。不确定它是否适用于ICS上的手机。