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

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) Поскольку мое уведомление прост, я не прикладываю никакого намерения.

Пожалуйста, дайте мне знать, если у вас есть идеи.

Изменить: моя цель - отклонить уведомление, не обращая внимания на мое фоновое приложение.

4b9b3361

Ответ 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);