我正在使用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 :(得分:7)
目前,使用NotificationListenerService
是获得StatusBarNotifications
通知和互动的唯一方式。在通知到达状态栏之前拦截和处理通知是不允许的,并且代表了相当显着的安全违规 - 这也在此处得到确认:https://stackoverflow.com/questions/10286087/intercepting-notifications。
如果这是可能的,那么理论上应用程序可以阻止系统范围内所有其他应用程序的所有通知,这不是一件好事。此外,即使使用NotificationListenerService
,您也只能看到来自其他应用程序的通知,而不是更改或删除它们。修改/取消应用程序通知的方法,即cancelAllNotifications()
,仅用于更改调用应用程序生成的通知。