在我正在开发的Android应用程序中,我希望能够检测何时出现新的状态栏通知,而不管它是否是由我的应用程序引起的。具体来说,我想计算给定时间范围内的通知数量。检测新的Android通知
这甚至是可能的,如果是这样,怎么样?
在我正在开发的Android应用程序中,我希望能够检测何时出现新的状态栏通知,而不管它是否是由我的应用程序引起的。具体来说,我想计算给定时间范围内的通知数量。检测新的Android通知
这甚至是可能的,如果是这样,怎么样?
其实,这是可能的,我在我的应用程序中使用它。
您需要注册一个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;
}
}
新Notification Listener API在采用Android 4.3可让您做到这一点。
有了这个,对辅助功能攻击的需求就减少了。它也允许你关闭通知。
通知侦听器尚未完全工作,例如,您无法从Google导航更新中检索文本(总是返回null)。这意味着可访问性'hack'仍然有用 – Fuzzy 2014-04-20 08:40:35
将其更改为“less need”而不是“no need” – thoutbeckers 2014-04-22 10:53:31
是否可以*以任何方式更改通知?我想使应用程序的通知无法通过该应用程序提取 – squirrel 2015-06-18 19:18:53
这很酷。不知道。谢谢! – koopaking3 2012-03-09 17:11:30
@Sean注意:要启动“AccessibilityService”,用户需要打开设置 - 辅助功能,启用辅助功能,然后单独启用您的服务。此时,他们会收到以下消息:“此无障碍服务可能能够收集您键入的所有文本,包括除密码之外的个人数据信用卡,还可能会记录您的用户界面交互,它来自应用程序xxx 。 使用...?”除非您将此用于个人用途或商业用途,否则这可能会对市场用户产生很大的信任。只是想给你一个大的图片 – koopaking3 2012-03-09 17:13:17
并不意味着你不应该使用它,只是在开始投入工作之前意识到建立你自己的 – koopaking3 2012-03-09 17:14:35