Уведомление Android остается открытым при запуске приложения

Я могу ставить в очередь и запускать уведомления через AlarmManager, я также могу запускать свое приложение, щелкнув уведомление. К сожалению, уведомление не удаляется при запуске приложения.

Настройка уведомлений:

Intent intent = new Intent(mainActivity, NotificationPublisher.class);
intent.setAction("handle");

PendingIntent pIntent = PendingIntent.getBroadcast(mainActivity, 0, intent, 
                                                    PendingIntent.FLAG_CANCEL_CURRENT);

Notification.Builder builder = new Notification.Builder(mainActivity)
    .setSmallIcon(R.drawable.phone)
    .setContentTitle(title)
    .setContentText(textContent)
    .setAutoCancel(true)
    .setContentIntent(pIntent);
return builder.getNotification();

При нажатии на уведомление передается широковещательная передача и выполняется эта функция:

void handle(Context context, Intent intent) {
    System.out.println("handle");
    Context mainContext = Extension.mainContext;
    Activity mainActivity = Extension.mainActivity;
    Intent launchIntent = new Intent(mainContext, mainActivity.getClass());
    launchIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(launchIntent);
}

Функция дескриптора запустит действие, но не удалит уведомление из строки состояния. Интересно ... Если я уберу вызов startActivity, уведомление закроется.

Вещи, которые я пробовал:

  • Установка флага автоматической отмены вручную
  • Вместо этого используйте builder.build ()
  • NotificationManger отмена (id) и / или cancelAll
  • Использование NotificationCompat.Builder
  • Использование обычного намерения запуска для setContentIntent вместо ручного вызова startActivity

comment
вы можете удалить его вручную на устройстве?   -  person AADProgramming    schedule 07.02.2015
comment
Да, с обычным свайпом проблем нет.   -  person Tom    schedule 07.02.2015
comment
Просто для перекрестной проверки, использовали ли вы тот же идентификатор уведомления при выполнении cancel (int id)? Думаю, есть 4 способа удалить любые уведомления: 1. пользователь отклоняет их 2. setAutocancel 3. cancel (int id) и cancelALL И я думаю, вы не используете Notification.FLAG_ONGOING_EVENT флаг .. Верно? Всего одно предложение: попробуйте cancel (int id) из своего handle метода, чтобы явно удалить его   -  person AADProgramming    schedule 07.02.2015
comment
Я использовал notificationManager.notify (0, notification); с помощью notificationManager.cancel (0). Кажется, это ничего не делает. Я также пробовал отменить все. Отключение пользователем всегда работает, а в конструкторе настроена автоматическая отмена. Я не использую FLAG_ONGOING_EVENT. Я также пробовал setOngoing (false), чтобы повторно убедиться, что я его не добавляю.   -  person Tom    schedule 07.02.2015


Ответы (2)


Основываясь на этом заявлении из вашего вопроса:

Интересно ... Если я уберу вызов startActivity, уведомление закроется.

Я предполагаю, что ваш Activity просто репостит Notification.

person David Wasser    schedule 07.02.2015
comment
Я изменил уведомление, чтобы вместо этого запустить отдельное приложение без уведомлений. Проблема все еще возникает, поэтому это не мой ответ. - person Tom; 07.02.2015
comment
OK. Судя по всем вашим комментариям, все это не имеет смысла. Так что, очевидно, происходит что-то фанковое. Сложно отлаживать удаленно. Удачи! И, пожалуйста, дайте нам знать, если вы в этом разберетесь. - person David Wasser; 09.02.2015
comment
Привет, Дэвид! Прошлой ночью произошел большой прорыв! Я использую что-то под названием OpenFL для создания приложений. Я использую образец проекта под названием (PiratePig). Когда я проводил тест, связанный с вашим комментарием, я создал другое приложение под названием VanillaPiratePig. PiratePig отправлял уведомления, а затем открывался VanillaPiratePig. Однако вчера вечером я попытался открыть приложение Gmail, и ошибка не возникла. Поэтому я почти уверен, что это ошибка производительности. Поскольку приложения OpenFL довольно неуклюжи для запуска, класс ОС Android, отвечающий за извлечение уведомлений из очереди, не получает временного интервала. - person Tom; 09.02.2015

Я работал над этим, запустив свое приложение через 300 мсек после нажатия на уведомление.

person Tom    schedule 10.02.2015