Уведомление о состоянии строки состояния перед его отображением

Я использую NotificationListenerService для обработки уведомлений устройства:

@Override
public void onNotificationPosted(StatusBarNotification sbn) {

    Log.d(TAG,"onNotificationPosted posted - ID :" + sbn.getId() + "\t"
            + sbn.getNotification().tickerText + "\t" + sbn.getPackageName());
 }

Метод onNotificationPosted() вызывается после того, как уведомление было отправлено на устройство. Есть ли способ поймать его перед его представлением?

Я видел, что уведомления о чтении также могут быть достигнуты с помощью AccessibilityManager, но снова он читается после появления уведомления.

Есть ли способ отложить всплывающие окна уведомлений устройства до некоторого момента?

Я знаю, что могу удалить уведомление, используя NotificationListenerService, как он появился (после того, как он выскочил к пользователю), и сохраните его и попытайтесь перезапустить его позже. Но у меня возникают проблемы с повторной перезагрузкой, и снова это происходит после того, как уведомление о статусной строке уже показано.

Ответ 1

В настоящее время использование NotificationListenerService является единственным способом уведомления и взаимодействия с StatusBarNotifications. Перехват и обработка уведомлений до того, как они даже достигнут строки состояния, недопустимы и будут представлять собой довольно заметное нарушение безопасности - это также подтверждается здесь: https://stackoverflow.com/info/10286087/intercepting-notifications.

Если бы это было возможно, приложение могло бы теоретически блокировать все уведомления для всех других приложений по всей системе, что было бы плохо. Кроме того, даже при NotificationListenerService вы можете получать уведомления только от других приложений, а не изменять или удалять их. Методы изменения/отмены уведомлений приложений, а именно cancelAllNotifications(), служат только для изменения уведомлений, генерируемых вызывающим приложением.