Можно ли программно очистить уведомление?
Я попробовал его с NotificationManager
, но не работал.
Есть ли другой способ, которым я могу это сделать?
Можно ли программно очистить уведомление?
Я попробовал его с NotificationManager
, но не работал.
Есть ли другой способ, которым я могу это сделать?
Используйте следующий код для отмены уведомления:
NotificationManager notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.cancel(NOTIFICATION_ID);
В этом коде всегда используется один и тот же идентификатор, используемый для уведомлений. Если у вас есть разные уведомления, которые необходимо отменить, вам нужно сохранить идентификаторы, которые вы использовали для создания Уведомления.
От: http://developer.android.com/guide/topics/ui/notifiers/notifications.html
Чтобы очистить уведомление о статусной строке, когда пользователь выбирает ее из окна Уведомления, добавьте флаг "FLAG_AUTO_CANCEL" в объект "Уведомление". Вы также можете очистить его вручную с помощью cancel (int), передав ему идентификатор уведомления или очистить все ваши уведомления с помощью cancelAll().
Но Дональд прав, вы можете только очистить уведомления, которые вы создали.
Поскольку ни один из них не отправил ответ на этот код:
notification.flags = Notification.FLAG_AUTO_CANCEL;
.. и если у вас уже есть флаги, вы можете ИЛИ FLAG_AUTO_CANCEL:
notification.flags = Notification.FLAG_INSISTENT | Notification.FLAG_AUTO_CANCEL;
Начиная с уровня API 18 (Jellybean MR2), вы можете отменить Уведомления, отличные от ваших, через NotificationListenerService.
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2)
public class MyNotificationListenerService extends NotificationListenerService {...}
...
private void clearNotificationExample(StatusBarNotification sbn) {
myNotificationListenerService.cancelNotification(sbn.getPackageName(), sbn.getTag(), sbn.getId());
}
Попробуйте метод по умолчанию, указанный в NotificationManager.
NotificationManager.cancelAll()
, чтобы удалить все уведомления.
NotificationManager.cancel(notificationId)
, чтобы удалить определенное уведомление.
Если вы используете NotificationCompat.Builder
(часть android.support.v4
), просто вызовите его метод объекта setAutoCancel
NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
builder.setAutoCancel(true);
Некоторые ребята сообщают, что setAutoCancel()
не работает для них, поэтому вы также можете попробовать этот способ
builder.getNotification().flags |= Notification.FLAG_AUTO_CANCEL;
Обратите внимание, что метод getNotification()
устарел!!!
String ns = Context.NOTIFICATION_SERVICE;
NotificationManager Nmang = (NotificationManager) getApplicationContext()
.getSystemService(ns);
Nmang .cancel(getIntent().getExtras().getInt("notificationID"));
для получения дополнительной информации нажмите здесь http://androiddhina.blogspot.in/2015/01/how-to-clear-notification-in-android.html
Фактически, как было сказано перед тем, как начинать с уровня API 18, вы можете отменить уведомления, опубликованные другими приложениями, чем ваши собственные, используя NotificationListenerService, но этот подход больше не будет работать на Lollipop, вот способ удалить уведомления, охватывающие также Lillipop API.
if (Build.VERSION.SDK_INT < 21) {
cancelNotification(sbn.getPackageName(), sbn.getTag(), sbn.getId());
}
else {
cancelNotification(sbn.getKey());
}
Если вы генерируете уведомление из службы, запущенной на переднем плане, используя
startForeground(NOTIFICATION_ID, notificationBuilder.build());
Затем выдача
notificationManager.cancel(NOTIFICATION_ID);
не отменяет Уведомление, и уведомление все равно появляется в строке состояния. В этом конкретном случае вам нужно будет выпустить
stopForeground( true );
из службы, чтобы вернуть его в фоновый режим и одновременно отменить уведомления. В качестве альтернативы вы можете нажать его на задний план, не отменяя уведомление и затем отменив уведомление.
stopForeground( false );
notificationManager.cancel(NOTIFICATION_ID);
Notification mNotification = new Notification.Builder(this)
.setContentTitle("A message from: " + fromUser)
.setContentText(msg)
.setAutoCancel(true)
.setSmallIcon(R.drawable.app_icon)
.setContentIntent(pIntent)
.build();
.setAutoCancel(истина)
когда вы нажимаете на уведомление, открываете соответствующую активность и удаляете уведомление из панели уведомлений
// Get a notification builder that compatible with platform versions
// >= 4
NotificationCompat.Builder builder = new NotificationCompat.Builder(
this);
builder.setSound(soundUri);
builder.setAutoCancel(true);
это работает, если вы используете построитель уведомлений...