我运行一个服务,该服务通过startForeground(int id, Notification notification
) 配置为前台服务,我想更新此通知。我实现这一点的代码大致如下:
private void setForeground() {
Notification foregroundNotification = this.getCurrentForegroundNotification();
// Start service in foreground with notification
this.startForeground(MyService.FOREGROUND_ID, foregroundNotification);
}
...
private void updateForegroundNotification() {
Notification foregroundNotification = this.getCurrentForegroundNotification();
// Update foreground notification
NotificationManager notificationManager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(MyService.FOREGROUND_ID, foregroundNotification);
}
并根据服务状态生成通知:
private Notification getCurrentForegroundNotification() {
// Set up notification info
String contentText = ...;
// Build notification
if (this.mUndeliveredCount > 0) {
String contentTitleNew = ...;
this.mNotificationBuilder
.setSmallIcon(R.drawable.ic_stat_notify_active)
.setContentTitle(contentTitleNew)
.setContentText(contentText)
.setLargeIcon(BitmapFactory.decodeResource(this.getResources(), R.drawable.ic_stat_notify_new))
.setNumber(this.mUndeliveredCount)
.setWhen(System.currentTimeMillis() / 1000L)
.setDefaults(Notification.DEFAULT_ALL);
} else {
this.mNotificationBuilder
.setSmallIcon(R.drawable.ic_stat_notify_active)
.setContentTitle(this.getText(R.string.service_notification_content_title_idle))
.setContentText(contentText)
.setLargeIcon(null)
.setNumber(0)
.setWhen(0)
.setDefaults(0);
}
// Generate Intent
Intent intentForMainActivity = new Intent(this, MainActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intentForMainActivity, 0);
// Build notification and return
this.mNotificationBuilder.setContentIntent(pendingIntent);
Notification foregroundNotification = this.mNotificationBuilder.build();
return foregroundNotification;
}
问题是我的通知没有正确更新:当我启动服务在前台运行时,调用updateForegroundNotification()
几次,this.mUndeliveredCount > 0
然后再次调用this.mUndeliveredCount == 0
,通知右下角的小通知图标不会消失,即使没有提供大图标。根据该类方法的文档,setSmallIcon(int icon)
这种行为并不是完全预期的,NotificationBuilder
其中指出如果指定了大图标,小图标应该只出现在右下角:
public Notification.Builder setSmallIcon (int icon)
设置小图标资源,用于表示状态栏中的通知。展开视图的平台模板将在左侧绘制此图标,除非还指定了大图标,在这种情况下,小图标将移动到右侧。
我在这里更新服务通知做错了什么?或者这是一个Android错误?