Мое решение для аналогичной проблемы было изменение флага PendingIntent на PendingIntent.FLAG_ONE_SHOT Из документации Android:
Флаг, указывающий, что этот PendingIntent может использоваться только один раз. Для использования с getActivity (Context, int, Intent, int), getBroadcast (Context, int, Intent, int) и getService (Context, int, Intent, int).
Если установлено, после send () вызывается для него, он будет автоматически отменен для вас, и любая дальнейшая попытка отправки через него потерпит неудачу.
и добавление уведомления FLAG_AUTO_CANCEL flag:
mBuilder.flags |= Notification.FLAG_AUTO_CANCEL;
, который должен гарантировать, что уведомление будет удалено после использования.
Редактировать : Сначала следует позвонить
Notification notification = mBuilder.build();
, затем
notification.flags = Notification.FLAG_AUTO_CANCEL;
Edit2 : только что заметил, что вы используете уведомление для startForeground()
. Это означает, что уведомление будет оставаться в течение всего времени, пока ваша служба / действие работает (это по умолчанию, так что пользователь будет знать, что служба / деятельность все еще работает).
Уведомление будет оставаться как Пока ваш Сервис / Деятельность работает как основной сервис.