我有一个音乐控制通知,允许用户开始/停止音乐。我希望它的行为与 Google Play 音乐应用程序通知完全相同:当音乐正在播放时,服务在前台且通知不可取消;当音乐未播放时,服务不再在前台,通知可以被移除。它运行良好,但当我取消服务的前台时,通知会很快被移除,然后立即重新出现。
以下是我的代码,首先是如何构建通知:
如果我使用stopForeground(false),通知在运行后仍然无法取消。如果我使用stopForeground(true),通知会被快速删除然后再次添加,这会导致奇怪的闪烁。
如何设置一个通知,在服务退出前台时可取消,而不必先删除再添加通知?
以下是我的代码,首先是如何构建通知:
NotificationCompat.Builder notifBuilder =
new android.support.v7.app.NotificationCompat.Builder(getApplicationContext())
.setStyle(new android.support.v7.app.NotificationCompat.MediaStyle()
.setShowActionsInCompactView(1, 2, 3)
.setShowCancelButton(true)
.setCancelButtonIntent(deletePendingIntent)))
.setSmallIcon(R.drawable.notif_logo)
.setColor(ResourcesCompat.getColor(getResources(), R.color.blue, getTheme()))
.setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
.setShowWhen(false);
notifBuilder.setContentIntent(pendingIntent);
notifBuilder.setDeleteIntent(deletePendingIntent);
这是我启动和更新通知的方法:
private void showNotification(NotificationCompat.Builder notifBuilder, boolean foreground) {
if (foreground) {
startForeground(NOTIFICATION_ID, notifBuilder.build());
} else {
stopForeground(false);
NotificationManager notificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(NOTIFICATION_ID, notifBuilder.build());
}
}
如果我使用stopForeground(false),通知在运行后仍然无法取消。如果我使用stopForeground(true),通知会被快速删除然后再次添加,这会导致奇怪的闪烁。
如何设置一个通知,在服务退出前台时可取消,而不必先删除再添加通知?