如何正确更新api 11的通知?

cot*_*aws 17 android android-notifications android-4.2-jelly-bean

  • 之前Notification.Builder进入了存在更新的方式通知了已被通知栏是调用setLatestEventInfo(),然后发送通知回通过NotificationManager.notify()与第一相匹配的ID调用notify()你做电话.

  • 现在setLatestEventInfo()不推荐使用消息:Use Notification.Builder而是.但我找不到任何有关如何正确更新通知的文档Notification.Builder.

  • 您是否只是想在Notification每次需要更新通知时重新创建新实例?然后简单地将其传递给NotificationManager.notify()您之前使用的ID?

  • 它似乎工作,但我想看看是否有人有任何官方验证,这是新的"这样做的方式"?

我之所以要问这是因为在Android 4.1.1 Jelly Bean,每次notify()调用通知都会闪现.更新进度条时,setProgress()这看起来非常糟糕,并且很难点击通知.4.1或以前的版本不是这种情况.因此,我想确保在提交错误之前正确执行此操作.

dbr*_*bro 20

我通过调用setWhen(0)Notification.Builder 解决了这个问题.似乎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);
Run Code Online (Sandbox Code Playgroud)

更新:

正如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);
Run Code Online (Sandbox Code Playgroud)

  • @ user1521536我们为什么要这样做呢? (2认同)