Android: использование AUTO-CANCEL при уведомлении, когда ваше приложение работает в фоновом режиме
Я рассмотрел все остальные AUTO-CANCEL-нерабочие вопросы здесь, и все они, кажется, включают ошибки, которые я не делаю. Я пробовал оба
builder.setAutoCancel(true);
и
Notification notif = builder.build();
notif.flags |= Notification.FLAG_AUTO_CANCEL;
Ничего не работает.
Я использую NotificationCompat, так как мой минимальный API - это 8. Вот мой полный код. В этом конкретном уведомлении я не призываю к намерению, так как мне не нужно, чтобы пользователь что-либо делал.
NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
builder.setContentTitle(getString(R.string.app_name) + ": my title");
builder.setContentText(message);
builder.setSmallIcon(R.drawable.notification_icon);
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.prog_icon);
builder.setLargeIcon(bitmap);
builder.setAutoCancel(true); // dismiss notification on user click
NotificationManager notiManager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
notiManager.notify(MY_NOTI_MANAGER_ID, builder.build());
Уведомление отображается только отлично. Вы можете провести его, чтобы очистить его. Но просто прослушивание не отменяет уведомления. Он просто загорается и остается там.
Некоторые возможные различия между моим кодом и другими пользователями размещены здесь:
1) Я использую NotificationCompat (это не должно меняться, но мы это слышали раньше).
2) Поскольку мое уведомление прост, я не прикладываю никакого намерения.
Пожалуйста, дайте мне знать, если у вас есть идеи.
Изменить: моя цель - отклонить уведомление, не обращая внимания на мое фоновое приложение.
Ответы
Ответ 1
Таким образом, вы, очевидно, нуждаетесь в ожидающем намерения.
В Android - менеджер уведомлений с уведомлением без намерения, я нашел решение, которое захватывает текущее активное приложение как ваше ожидающее намерения (так, t должен начать свою собственную деятельность, чтобы отклонить уведомление).
Я просто добавил следующие две строки кода (сразу после установки автоматического отмены):
PendingIntent notifyPIntent =
PendingIntent.getActivity(getApplicationContext(), 0, new Intent(), 0);
builder.setContentIntent(notifyPIntent);
Он отлично поработал. Я бы сказал, что если вы не хотите, чтобы ваша активность перезагружалась в результате нажатия пользователем вашего уведомления, то это ваш лучший вариант.
Ответ 2
Кажется, что отсутствует вызов PendingIntent
и setContentIntent()
. Я считаю, что для автоматической отмены требуется работать.
Вот некоторая Notification
-разборная логика из этого примера проекта, которая работает:
private void raiseNotification(Intent inbound, File output, Exception e) {
NotificationCompat.Builder b=new NotificationCompat.Builder(this);
b.setAutoCancel(true).setDefaults(Notification.DEFAULT_ALL)
.setWhen(System.currentTimeMillis());
if (e == null) {
b.setContentTitle(getString(R.string.download_complete))
.setContentText(getString(R.string.fun))
.setSmallIcon(android.R.drawable.stat_sys_download_done)
.setTicker(getString(R.string.download_complete));
Intent outbound=new Intent(Intent.ACTION_VIEW);
outbound.setDataAndType(Uri.fromFile(output), inbound.getType());
b.setContentIntent(PendingIntent.getActivity(this, 0, outbound, 0));
}
else {
b.setContentTitle(getString(R.string.exception))
.setContentText(e.getMessage())
.setSmallIcon(android.R.drawable.stat_notify_error)
.setTicker(getString(R.string.exception));
}
NotificationManager mgr=
(NotificationManager)getSystemService(NOTIFICATION_SERVICE);
mgr.notify(NOTIFY_ID, b.build());
}
Ответ 3
Привет, дорогой друг, если вы хотите показать не отмену уведомление (не подлежит аннулированию для пользователей) для конкретного и после этого вам нужно очистить его (например, музыкальный плеер), вы можете использовать это.
mNotificationBuilder .setSmallIcon(android.R.drawable.btn_plus);
mNotificationBuilder .setContentTitle("My notification");
mNotificationBuilder .setContentText("Notificattion From service");
mNotificationBuilder .setLights(0xFF0000FF, 500, 500);
Notification note = mNotificationBuilder.build();
note.flags = Notification.FLAG_ONGOING_EVENT; // For Non cancellable notification
mNotificationManager.notify(NOTIFICATION_ID, note);