在我正在处理的Android应用中,我希望能够检测到何时出现新的状态栏通知,无论它是否是由我的应用引起的。更具体地说,我想计算给定时间范围内的通知数量。
这是否可能,如果是,怎么样?
答案 0 :(得分: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;
}
}
Example for checking if your Service is activated
适用于Android 4.3及更高版本:
答案 1 :(得分:21)
Android 4.3中的新Notification Listener API可让您执行此操作。
通过这种方式,对可访问性黑客的需求减少了。它还允许您解除通知。