Подтвердить что ты не робот

Уведомление Android о намерении очистить его

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

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);

Спасибо

4b9b3361

Ответ 1

Отъезд FLAG_AUTO_CANCEL

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

EDIT:

notification.flags |= Notification.FLAG_AUTO_CANCEL;

Ответ 2

Установите флаги в файлах notification.flags вместо уведомлений .defaults.

Пример:

notification.flags |= Notification.FLAG_ONLY_ALERT_ONCE | Notification.FLAG_AUTO_CANCEL;

Ответ 3

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

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

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

builder.build().flags |= Notification.FLAG_AUTO_CANCEL;

Ответ 4

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

Ответ 5

 /** 
      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);

Ответ 6

Использование 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());

Часто вы можете направить пользователя к соответствующему контенту и, таким образом, заменить "новый Intent()" на что-то еще.