首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何正确更新通知帖子api 11?

如何正确更新通知帖子api 11?
EN

Stack Overflow用户
提问于 2012-07-17 05:40:40
回答 4查看 4.6K关注 0票数 18
  • Notification.Builder出现之前the way to update通知托盘中已经存在的通知是调用setLatestEventInfo(),然后使用与您进行的第一个notify()调用相匹配的ID通过NotificationManager.notify()调用发回通知。
  • 现在不推荐使用setLatestEventInfo(),并显示消息:Use Notification.Builder。但是我找不到任何关于如何使用Notification.Builder.
  • Are正确更新通知的文档,您只是假设在每次需要更新通知时重新创建一个新的Notification实例?然后简单地用你之前使用的ID将它传递给NotificationManager.notify()
  • 它似乎可以工作,但我想看看是否有人有任何官方验证,这是新的“做这件事的方式”?

我问这个的真正原因是因为在Android 4.1.1 Jelly Bean中,每次调用notify()时,通知都会闪烁。当使用setProgress()更新进度条时,这看起来真的很糟糕,并且很难点击通知。在4.1或以前的版本中,情况并非如此。因此,在提交bug之前,我想确保我的操作是正确的。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-09-19 06:50:35

我通过在Notification.Builder上调用setWhen(0)解决了这个问题。看起来Android对这个参数的默认值不适合在没有整个通知淡出/淡入的情况下更新通知视图的一部分。

代码语言:javascript
复制
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并不是一种优雅的方式。我形成了一个类似如下的解决方案:

代码语言:javascript
复制
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);
票数 20
EN

Stack Overflow用户

发布于 2012-08-09 22:00:48

你所做的是正确的,你只是错过了你可以设置的标志。我不知道您的特定通知实现,但您可以考虑使用:

代码语言:javascript
复制
setOngoing(boolean ongoing)

代码语言:javascript
复制
setOnlyAlertOnce(boolean onlyAlertOnce)
票数 2
EN

Stack Overflow用户

发布于 2012-09-14 21:43:19

我猜(因为我刚才遇到了同样的问题),您在通知中使用了RemoteView。我成功地更新了通知,而不是像这样闪烁:

代码语言:javascript
复制
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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11512986

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档