【问题标题】:Handling status bar notification before it is displayed在显示之前处理状态栏通知
【发布时间】:2015-05-01 01:31:01
【问题描述】:

我正在使用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 删除通知(在它弹出给用户之后)并保存它并稍后尝试重新启动它。但是我在重新启动时遇到了问题,并且在状态栏通知已经显示之后再次发生这种情况。

【问题讨论】:

  • 您说的是哪种通知? gcm推送通知?或任何其他......为什么你不能在展示之前完成所有必要的工作?
  • 设备通知上的所有应用。我很乐意在展示之前完成这项工作,我该如何接收这些通知?
  • AFAIK android 的通知侦听器是处理通知的唯一方法,但在显示之后。否则没有其他方法,或者至少我知道。
  • 您的目标是在通知到达时隐藏(或以其他方式控制)而不显示它们并分散用户的注意力吗?如果是这样,隐藏状态栏是可能的(或部分)解决方案吗?
  • 您可以使用 ACTION_MANAGE_ALL_APPLICATIONS_SETTINGS 提示用户优先考虑和切换通知。以此启动 Activity 以显示通知屏幕。

标签: android android-notifications


【解决方案1】:

目前,使用NotificationListenerService 是获得StatusBarNotifications 通知和交互的唯一方式。不允许在通知到达状态栏之前拦截和处理通知,这将代表相当明显的安全违规 - 这也在这里得到确认:https://stackoverflow.com/questions/10286087/intercepting-notifications

如果这是可能的,那么理论上应用程序可以阻止系统范围内所有其他应用程序的所有通知,这不是一件好事。此外,即使使用NotificationListenerService,您也只能看到来自其他应用程序的通知,而不能更改或删除它们。修改/取消应用程序通知的方法,即cancelAllNotifications(),仅用于更改调用应用程序生成的通知。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多