我需要显示通知并在其生命周期内更新它。特别是,我需要更改某些标志,例如“show chronometer”。为此,文档指出我们应该使用相同的ID调用NotificationManager.notify()
。
所以我们的想法是拥有这些方法:
private void showInitialNotification() {
NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
...
mNotificationManager.notify(NOTIFICATION_ID, builder.build());
}
private void addChronometerFlag() {
NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
...
builder.setUsesChronometer(true);
mNotificationManager.notify(NOTIFICATION_ID, builder.build());
}
private void removeChronometerFlag() {
NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
...
builder.setUsesChronometer(false);
mNotificationManager.notify(NOTIFICATION_ID, builder.build());
}
这在Android 5.1和6.0中完全正常,但在Android 4.4中 (以下,我猜?)计时器未删除,虽然内容标题,文字,图标和c都正确更新。
知道为什么吗?
我不能使用相同的Notification.Builder
对象(例如this answer中建议的那样),因为我还需要更新通知中可用的操作,并且无法将以前添加的操作删除到助洗剂。
我的用例有点复杂(它是一个媒体播放器),但这是我能够重现的错误的最小例子。例如,它也存在于Google的UniversalMusicPlayer样本中 - 在Lollipop中可以正常工作,但在KitKat中则不行。
FWIW,完整的示例代码为here。