Как убрать уведомление при остановке службы?

Код, который я использую сейчас, таков:

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);
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
37
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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(). Если вы подняли Notification напрямую с помощью NotificationManager, cancel()Notification с помощью NotificationManager.

@Vince: Вы не звоните show() в NotificationManager, чтобы показать Notification. Вы используете startForeground(). Итак, используйте stopForeground(), чтобы удалить Notification.

CommonsWare 06.06.2019 12:53

@Vince: Когда вы показываете Notification, вы используете NotificationManager для создания канала. Это все равно понадобится, когда этот канал еще не существует, поэтому вам нужно сохранить этот код.

CommonsWare 06.06.2019 12:55

Другие вопросы по теме