Ответ 1
Отъезд FLAG_AUTO_CANCEL
Бит для поразрядного ввода в поле флагов, который должен быть установлен, если уведомление должно быть отменено, когда пользователь щелкнул его.
EDIT:
notification.flags |= Notification.FLAG_AUTO_CANCEL;
Я прочитал много примеров создания уведомлений. То, что я хотел достичь, заключается в том, что уведомление будет выполняться виджетами, я бы хотел намерение уведомления при нажатии, чтобы очистить его, когда пользователь нажмет на него. У меня нет активности для возврата. Уведомление для моих целей будет просто уведомлять, ничего больше. Итак, какой будет код намерения, который просто очистит/отменит сам. Код ниже - это действие, запущенное кнопкой (код кнопки не включен), уведомление будет активировано фоновым сервисом.
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);
Спасибо
Отъезд FLAG_AUTO_CANCEL
Бит для поразрядного ввода в поле флагов, который должен быть установлен, если уведомление должно быть отменено, когда пользователь щелкнул его.
EDIT:
notification.flags |= Notification.FLAG_AUTO_CANCEL;
Установите флаги в файлах notification.flags вместо уведомлений .defaults.
Пример:
notification.flags |= Notification.FLAG_ONLY_ALERT_ONCE | Notification.FLAG_AUTO_CANCEL;
Если вы используете NotificationCompat.Builder
(часть android.support.v4
), просто вызовите его метод объекта setAutoCancel
NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
builder.setAutoCancel(true);
Некоторые ребята сообщают, что setAutoCancel()
не работает для них, поэтому вы также можете попробовать этот способ
builder.build().flags |= Notification.FLAG_AUTO_CANCEL;
Единственный способ, которым я могу это сделать, - это указать Notification
Intent
на фон Service
. Когда эта служба запущена, она очистит данный Notification
с помощью NotificationManager.cancel(int id)
. Затем Service
остановится. Это некрасиво, и реализовать его будет непросто, но я не могу найти другого способа сделать это.
/**
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);
Использование 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()" на что-то еще.