我运行的服务通过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
参数进行调用。尽管没有提供大图标,但通知底部右侧的小图标却不会消失。根据NotificationBuilder
类的文档中所述,这种行为并非完全符合预期,其中指定了只有在指定了大图标时,小图标才会出现在右下角:
那么在更新服务通知时我做错了什么呢?或者这是Android的bug?
public Notification.Builder setSmallIcon (int icon)
设置将用于表示状态栏中的通知的小图标资源。在扩展视图的平台模板中,除非也指定了一个大图标,否则该图标将绘制在左侧,否则小图标将被移动到右侧。