服务停止时如何删除通知?
How to remove notification when service stopped?
我现在使用的代码是这样的:
private void removeNotification(){
NotificationManager notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && notificationManager != null) {
notificationManager.deleteNotificationChannel(Constants.CHANNEL_ID.CHANNEL_ID);
}
if (notificationManager != null) {
notificationManager.cancel(Constants.NOTIFICATION_ID.SERVICE_ID);
}
Log.i(TAG, "Notification removed!");
}
但是我的代码和 stopForeground(true);
有什么区别?
因为它都删除了通知。
当我的服务被破坏时,我应该使用哪个?
编辑
通知代码:
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this, Constants.CHANNEL_ID.CHANNEL_ID);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationChannel notificationChannel =
new NotificationChannel(
Constants.CHANNEL_ID.CHANNEL_ID,
"Media PlayBack",
NotificationManager.IMPORTANCE_LOW);
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.createNotificationChannel(notificationChannel);
notificationBuilder.setChannelId(Constants.CHANNEL_ID.CHANNEL_ID);
}
notificationBuilder.setShowWhen(false)
.setStyle(new android.support.v4.media.app.NotificationCompat.MediaStyle().setMediaSession(mMediaSessionCompat.getSessionToken()).setShowActionsInCompactView(0, 1, 2))
.setSmallIcon(android.R.drawable.stat_sys_headset).setContentTitle(activeSong.getTitle()).setContentText(activeSong.getArtist())
.addAction(R.drawable.ic_action_prev_white, null, playbackAction(3))
.addAction(notificationAction, null, play_pause_action).addAction(R.drawable.ic_action_next_white, null, playbackAction(2))
.addAction(R.drawable.ic_close, null, playbackAction(4))
.setColor(getResources().getColor(R.color.theme1));
notificationBuilder.setOngoing(true);
Notification notification = notificationBuilder.build();
startForeground(Constants.NOTIFICATION_ID.SERVICE_ID, notification);
Code i'm using now is this
不要删除频道。
But what is the difference between my code and stopForeground(true); ?
stopForeground(true)
仅在您使用 startForeground()
.
时有效
Which one should i use when my service gets destroyed?
如果您使用 startForeground()
,请使用 stopForeground()
。如果你直接使用 NotificationManager
提高 Notification
,cancel()
使用 NotificationManager
.
Notification
我现在使用的代码是这样的:
private void removeNotification(){
NotificationManager notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && notificationManager != null) {
notificationManager.deleteNotificationChannel(Constants.CHANNEL_ID.CHANNEL_ID);
}
if (notificationManager != null) {
notificationManager.cancel(Constants.NOTIFICATION_ID.SERVICE_ID);
}
Log.i(TAG, "Notification removed!");
}
但是我的代码和 stopForeground(true);
有什么区别?
因为它都删除了通知。
当我的服务被破坏时,我应该使用哪个?
编辑
通知代码:
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this, Constants.CHANNEL_ID.CHANNEL_ID);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationChannel notificationChannel =
new NotificationChannel(
Constants.CHANNEL_ID.CHANNEL_ID,
"Media PlayBack",
NotificationManager.IMPORTANCE_LOW);
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.createNotificationChannel(notificationChannel);
notificationBuilder.setChannelId(Constants.CHANNEL_ID.CHANNEL_ID);
}
notificationBuilder.setShowWhen(false)
.setStyle(new android.support.v4.media.app.NotificationCompat.MediaStyle().setMediaSession(mMediaSessionCompat.getSessionToken()).setShowActionsInCompactView(0, 1, 2))
.setSmallIcon(android.R.drawable.stat_sys_headset).setContentTitle(activeSong.getTitle()).setContentText(activeSong.getArtist())
.addAction(R.drawable.ic_action_prev_white, null, playbackAction(3))
.addAction(notificationAction, null, play_pause_action).addAction(R.drawable.ic_action_next_white, null, playbackAction(2))
.addAction(R.drawable.ic_close, null, playbackAction(4))
.setColor(getResources().getColor(R.color.theme1));
notificationBuilder.setOngoing(true);
Notification notification = notificationBuilder.build();
startForeground(Constants.NOTIFICATION_ID.SERVICE_ID, notification);
Code i'm using now is this
不要删除频道。
But what is the difference between my code and stopForeground(true); ?
stopForeground(true)
仅在您使用 startForeground()
.
Which one should i use when my service gets destroyed?
如果您使用 startForeground()
,请使用 stopForeground()
。如果你直接使用 NotificationManager
提高 Notification
,cancel()
使用 NotificationManager
.
Notification