2015-04-26 3 views
11

Я использую 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, поскольку он появился (после того, как он появился пользователю), и сохраните его и попытайтесь перезапустить его позже. Но у меня возникают проблемы с перезагрузкой, и снова это происходит после того, как уведомление о состоянии уже показано.

+0

какие уведомления вы говорите? gcm push Уведомления? или любой другой ... почему вы не можете сделать всю необходимую работу, прежде чем показывать ее? – nvinayshetty

+0

Все приложения на устройствах. я буду рад выполнить эту работу, прежде чем показывать ее, как я могу узнать эти уведомления? –

+1

AFAIK Notifier Listener - единственный способ обработки уведомлений, но после его показа. В противном случае нет другого пути или, по крайней мере, я знаю. –

ответ

7

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

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

Смежные вопросы