我需要显示通知并在其生命周期内更新它 . 特别是,我需要更改某些标志,例如"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中完全正常,但 in Android 4.4 (及以下,我猜?) the chronometer is not removed ,尽管内容 Headers ,文本,图标和c都已正确更新 .

知道为什么吗?

我不能使用相同的 Notification.Builder 对象(例如this answer中建议的那样),因为我还需要更新通知上可用的操作,并且无法将以前添加的操作删除到Builder .

我的用例有点复杂(它已经能够重现了 . 它's also present, for example, in Google' s UniversalMusicPlayer样本 - 在Lollipop中工作正常,但在KitKat中没有 .

FWIW,完整的示例代码是here .