检测新的Android通知

Sea*_*ean 29 notifications android

在我正在处理的Android应用中,我希望能够检测到新的状态栏通知何时出现,无论它是否是由我的应用引起的.更具体地说,我想计算给定时间范围内的通知数量.

这是否可能,如果是这样,怎么样?

For*_*rce 55

实际上,有可能,我在我的应用程序中使用它.

对于Android 4.2及更低版本:

您需要注册AccessibilityService并确保用户启用该服务.

服务示例:

public class InstantMessenger extends AccessibilityService {

@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
    if (event.getEventType() == AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED) {
        //Do something, eg getting packagename
        final String packagename = String.valueOf(event.getPackageName());  
}
}

@Override
protected void onServiceConnected() {
    if (isInit) {
        return;
    }
    AccessibilityServiceInfo info = new AccessibilityServiceInfo();
    info.eventTypes = AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED;
    info.feedbackType = AccessibilityServiceInfo.FEEDBACK_SPOKEN;
    setServiceInfo(info);
    isInit = true;
}

@Override
public void onInterrupt() {
    isInit = false;
}
}
Run Code Online (Sandbox Code Playgroud)

检查您的服务是否已激活的示例

对于Android 4.3及更高版本:

使用Notification Listener API

  • @Sean注意:要启动`AccessibilityService`,用户需要打开设置 - 辅助功能,启用辅助功能,然后单独启用您的服务.此时,它们会显示以下消息:"此辅助功能服务可能能够收集您键入的所有文本,包括除密码之外的个人数据信用卡.它还可能记录您的用户界面交互.它来自应用程序xxx . 使用...?" 除非您将其用于个人用途或业务,否则这可能会让市场用户产生很大的信任.只想给你全局了解 (12认同)
  • 根据Google的建议,Android 4.3及更高版本应该更喜欢[Notification Listener API](http://developer.android.com/about/versions/android-4.3.html#NotificationListener).请参阅@thoutbeckers下面的答案 (4认同)

tho*_*ers 21

Android 4.3中的新Notification Listener API使您可以执行此操作.

有了这个,对可访问性黑客的需求就会减少.它还允许您解除通知.

  • 是否可以通过任何方式“更改”通知?我想使某个应用程序的通知无法被该应用程序撤消 (2认同)