Notification.Builder
出现之前the way to update通知托盘中已经存在的通知是调用setLatestEventInfo()
,然后使用与您进行的第一个notify()
调用相匹配的ID通过NotificationManager.notify()
调用发回通知。setLatestEventInfo()
,并显示消息:Use Notification.Builder
。但是我找不到任何关于如何使用Notification.Builder
.Notification
实例?然后简单地用你之前使用的ID将它传递给NotificationManager.notify()
?我问这个的真正原因是因为在Android 4.1.1 Jelly Bean
中,每次调用notify()
时,通知都会闪烁。当使用setProgress()
更新进度条时,这看起来真的很糟糕,并且很难点击通知。在4.1或以前的版本中,情况并非如此。因此,在提交bug之前,我想确保我的操作是正确的。
发布于 2012-09-19 06:50:35
我通过在Notification.Builder上调用setWhen(0)
解决了这个问题。看起来Android对这个参数的默认值不适合在没有整个通知淡出/淡入的情况下更新通知视图的一部分。
Notification.Builder builder = new Notification.Builder(c)
.setContentTitle("Notification Title")
.setSmallIcon(R.drawable.ic_notification_icon)
.setProgress(max_progress,current_progress,false)
.setWhen(0);
notification = builder.getNotification();
mNotificationManager.notify(NOTIFICATION_ID, notification);
更新:
正如WolframRittmeyer所说,使用when=0
并不是一种优雅的方式。我形成了一个类似如下的解决方案:
if(mNotif == null) {
//either setting mNotif first time
//or was lost when app went to background/low memory
mNotif = createNewNotification();
}
else {
long oldWhen = mNotif.when;
mNotif = createNewNotification();
mNotif.when = oldWhen;
}
mNotificationManager.notify(NOTIFICATION_ID, mNotif);
发布于 2012-08-09 22:00:48
你所做的是正确的,你只是错过了你可以设置的标志。我不知道您的特定通知实现,但您可以考虑使用:
setOngoing(boolean ongoing)
或
setOnlyAlertOnce(boolean onlyAlertOnce)
发布于 2012-09-14 21:43:19
我猜(因为我刚才遇到了同样的问题),您在通知中使用了RemoteView。我成功地更新了通知,而不是像这样闪烁:
RemoteViews views;
if( this.mNotification == null) {
views = new RemoteViews(getPackageName(), R.layout.notification);
this.mNotification = new Notification.Builder(this)
.setContent(views)
.setSmallIcon(R.drawable.status_icon)
.setContentIntent(mNotificationAction)
.setOngoing(true)
.setOnlyAlertOnce(true)
.getNotification();
} else {
views = this.mNotification.contentView;
}
感谢@seanmonstar回复Refresh progress bar in notification bar。
https://stackoverflow.com/questions/11512986
复制相似问题