Уведомление Android намерено очистить себя - PullRequest
29 голосов
/ 13 августа 2010

Я прочитал много примеров того, как создавать уведомления.Чего я хотел добиться, так это того, что уведомление будет выполнено виджетом, и я хотел бы, чтобы при щелчке по нему было выбрано намерение уведомления, чтобы оно само очищалось при нажатии на него. У меня нет действия, к которому можно вернуться.Уведомление для моих целей просто уведомит, больше ничего.Так какой же будет код намерения, который просто очистит / отменит сам.Приведенный ниже код представляет собой действие, запускаемое кнопкой (код кнопки не включен), уведомление запускается фоновой службой.

CharSequence title = "Hello";
CharSequence message = "Hello, Android!";
final NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
final Notification notification = new Notification(R.drawable.icon,"A New Message!",System.currentTimeMillis());

notification.defaults=Notification.FLAG_ONLY_ALERT_ONCE+Notification.FLAG_AUTO_CANCEL;
Intent notificationIntent = new Intent(this, AndroidNotifications.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,notificationIntent, 0);

notification.setLatestEventInfo(AndroidNotifications.this, title,message, pendingIntent);
notificationManager.notify(NOTIFICATION_ID, notification);

Спасибо

Ответы [ 6 ]

74 голосов
/ 13 августа 2010

Проверить FLAG_AUTO_CANCEL

Бит, который будет поразрядно вставлен в поле флагов, которое должно быть установлено, если уведомление будет отменено при щелчке пользователем.

РЕДАКТИРОВАТЬ:

notification.flags |= Notification.FLAG_AUTO_CANCEL;
19 голосов
/ 12 марта 2012

Установите флажки в уведомлениях.флаги вместо messages.defaults.

Пример:

notification.flags |= Notification.FLAG_ONLY_ALERT_ONCE | Notification.FLAG_AUTO_CANCEL;
10 голосов
/ 14 апреля 2014

Если вы используете NotificationCompat.Builder (часть android.support.v4), просто вызовите метод его объекта setAutoCancel

NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
builder.setAutoCancel(true);

Некоторые ребята сообщали, что setAutoCancel() у них не работает, так что вы можете попробовать и этот способ

builder.build().flags |= Notification.FLAG_AUTO_CANCEL;
1 голос
/ 17 февраля 2016

Использование setContentIntent должно решить вашу проблему:

.setContentIntent(PendingIntent.getActivity(this, 0, new Intent(), 0));

Например:

NotificationCompat.Builder mBuilder= new NotificationCompat.Builder(this)
        .setSmallIcon(R.drawable.notification_icon)
        .setContentTitle("title")
        .setAutoCancel(true)
        .setContentText("content")
        .setContentIntent(PendingIntent.getActivity(this, 0, new Intent(), 0));
NotificationManager notificationManager= (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(0, mBuilder.build());

Часто вы можете захотеть направить пользователя к соответствующему контенту и, следовательно, заменить его новым намерением.() 'с чем-то еще.

1 голос
/ 24 апреля 2012
 /** 
      Post a notification to be shown in the status bar. 
      Obs.: You must save this values somewhere or even pass it as an extra through Intent to use it later
 */
 notificationManager.notify(NOTIFICATION_ID, notification);

 /** 
      Cancel a previously shown notification given the notification id you've saved before
 */
 notificationmanager.cancel(NOTIFICATION_ID);
1 голос
/ 13 августа 2010

Единственный способ, которым я могу видеть это, - это чтобы ваши Notification Intent указывали на фон Service. Когда эта служба запускается, она очищает данные Notification, используя NotificationManager.cancel(int id). Service тогда остановится. Это не красиво, и его нелегко реализовать, но я не могу найти другого способа сделать это.

...