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

У меня есть приложение для Android с работающей функцией, которую я перенес на Android 9 (ранее ориентировался на Android 8), что несколько нарушило эту функцию.

У меня есть этот поток (при запуске приложения):

  1. Экран выключен
  2. Происходит что-то, что вызывает уведомление
  3. Экран включен *выполняется действие для уведомления*
  4. Уведомление исчезает с панели уведомлений автоматически

После таргетинга на Android 9 уведомление не исчезает на шаге 4. Следствием этого является то, что после того, как я выполнил действие, я все еще могу нажать на уведомление, и действие произойдет снова (нежелательное поведение).

Это изменение поведения кажется недокументированным (предыдущее значение по умолчанию заключалось в том, чтобы отклонять уведомление после выполнения действия). Как я могу заставить свое приложение работать по-старому?

Вопрос. Как вернуть старое поведение? (уведомление закрывается автоматически, когда действие запускается и пользователь его видит)

Обновление 1: некоторый (урезанный/упрощенный) код, надеюсь, разъяснит, как это работает.

public class FooActivity extends AppCompatActivity {
}

public class NotificationUtil {
   // A lot of boilerplate omitted where notification channels are created
   public void notify(Intent startActivity) {  
       ContextProvider.getSystemService(Context.NOTIFICATION_SERVICE).notify("NotificationUtil", 0,  new NotificationCompat.Builder().nextIntent(startActivity).x().y().build());
   }
}

Таким образом, шаг 2 запускает NotificationUtil.notify() с действием Intent, установленным на FooActivity. FooActivity запускается, как и ожидалось, автоматически при включении экрана (например, на мой взгляд, уведомление «используется» неявно. Но уведомление остается на панели уведомлений, и можно снова нажать и запустить FooActivity (нежелательное поведение).

Обновление 2: вопрос не в том, как программно отклонить уведомление (на это отвечает Как закрыть уведомление после нажатия кнопки), а скорее когда это сделать, чтобы уведомление не затемняется до тех пор, пока пользователь не посмотрит на него.

Ссылки

  1. https://developer.android.com/about/versions/pie/android-9.0-changes-28
  2. https://developer.android.com/guide/topics/ui/notifiers/notifications

person Alix    schedule 24.05.2019    source источник
comment
Было бы полезно добавить пример кода, чтобы прояснить, что делает ваше текущее решение.   -  person trker    schedule 24.05.2019
comment
Конечно, я обновлю пост с более подробной информацией   -  person Alix    schedule 24.05.2019
comment
Кто проголосовал за закрытие поста, чего еще не хватает в моем вопросе?   -  person Alix    schedule 24.05.2019
comment
@Speed ​​Это на ту же тему, но я бы сказал, разные вопросы. Это гораздо конкретнее   -  person Alix    schedule 24.05.2019
comment
@trker autoCancel(true) уже установлен. Ручной вызов отмены сработает, но когда? Если в onCreate() уведомление немедленно отменяется (до того, как пользователь включит экран)   -  person Alix    schedule 24.05.2019
comment
setAutoCancel применяется только к содержанию, а не к действиям.   -  person ianhanniballake    schedule 24.05.2019
comment
Материал, который я пробовал (который не работает): Отменить уведомления в onResume() и onWindowAttached() для действия, которое я хочу запустить. Уведомление отменено слишком рано. Я хочу, чтобы уведомление запускалось до тех пор, пока пользователь не включит экран и не увидит действие.   -  person Alix    schedule 27.05.2019
comment
Теперь у вас есть @ianhanniballake, который занимается этим... и, если я не ошибаюсь, Ян работает в Google :)   -  person Martin Marconcini    schedule 03.06.2019