У меня есть приложение для Android с работающей функцией, которую я перенес на Android 9 (ранее ориентировался на Android 8), что несколько нарушило эту функцию.
У меня есть этот поток (при запуске приложения):
- Экран выключен
- Происходит что-то, что вызывает уведомление
- Экран включен *выполняется действие для уведомления*
- Уведомление исчезает с панели уведомлений автоматически
После таргетинга на 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: вопрос не в том, как программно отклонить уведомление (на это отвечает Как закрыть уведомление после нажатия кнопки), а скорее когда это сделать, чтобы уведомление не затемняется до тех пор, пока пользователь не посмотрит на него.
Ссылки
setAutoCancel
применяется только к содержанию, а не к действиям. - person ianhanniballake   schedule 24.05.2019