哥哥带你破解安卓红包助手拦截微信红包,支付宝红包的秘密

2019-11-09  本文已影响0人  哥哥是欧巴Vitory

不要为了抢几毛钱的红包,下载这个那个,乱七八糟的红包助手,此类软件到底是如何工作的?哥哥带你一探究竟!

原理实时监听设备的通知栏消息,并可以捕获到通知的内容,然后进行对应的操作。

工具 脑子里第一反应就是使用 AccessibilityService 。 AccessibilityService 支持的事件监听类型中有 TYPE_NOTIFICATION_STATE_CHANGED ,该事件类型就是用来监听通知栏消息状态改变的,众多的抢红包插件利用的就是这个原理。但后来发现 AccessibilityService 是在Android 4.3(API18)之前使用的,4.3之后,官方建议使用 NotificationListenerService来监听通知栏消息。

Notification  Listenter

NotificationListenerService 的使用范围也挺广的,比如我们熟知的抢红包,智能手表同步通知,通知栏去广告工具等,都是利用它来完成的。所以,我也想赶时髦地好好利用这把“利器”。最后方案也就出来了:在 Android 4.3 以下(API < 18)使用 AccessibilityService 来读取新通知,在 Android 4.3 及以上(API >= 18)使用 NotificationListenerService 来满足需求。

接下来哥哥手把手教你,实时检测微信新通知,如果该通知是微信红包的话,就进入微信聊天页面。

Are  You  Ready ? Lets  Start  !

首先创建一个WeChatNotificationListenerService继承NotificationListenerService。然后在AndroidManifest.xml中进行声明相关权限和<intent-filter>:

然后一般会重写下面这三个方法:

onNotificationPosted(StatusBarNotification sbn):当有新通知到来时会回调;

onNotificationRemoved(StatusBarNotification sbn):当有通知移除时会回调;

onListenerConnected():当NotificationListenerService是可用的并且和通知管理器连接成功时回调。

下面我们来看看 NotificationListenerService 中的重点: onNotificationPosted(StatusBarNotification sbn) 方法。

从上面的代码可知,对于分析Notification的内容分为了两种:

当 API > 18 时,利用Notification.extras来获取通知内容。extras是在 API 19 时被加入的;

当 API = 18 时,利用反射获取Notification中的内容。具体的代码在下方。

凭着 onNotificationPosted(StatusBarNotification sbn) 方法就已经可以完成监听微信通知并打开的动作了。 

讲完了 NotificationListenerService 之后,按照前面说的那样,在 API < 18 的时候使用 AccessibilityService 。

同样,创建一个 WeChatAccessibilityService ,并且在 AndroidManifest.xml 中进行声明:

声明之后,还要对WeChatAccessibilityService进行配置。需要在 res 目录下新建一个 xml 文件夹,在里面新建一个 accessible_service_config.xml 文件:

自定义Service代码:

看了一圈WeChatAccessibilityService的代码,发现和WeChatNotificationListenerService在 API < 18 时处理的逻辑是一样的,getText(notification)方法就是上面那个,在这里就不复制粘贴了,基本没什么好讲的了。有了WeChatAccessibilityService之后,在 API < 18 的情况下也能监听通知啦。

除了监听通知之外,AccessibilityService还可以进行模拟点击、检测界面变化等功能。具体的可以在 GitHub 上搜索抢红包有关的 Repo 进行深入学习。而NotificationListenerService的监听通知功能更加强大,也更加专业。在一些设备上,如果NotificationListenerService被授予了权限,那么可以做到该监听进程不死的效果,也算是另类的进程保活。

1,NotificationListenerService取消通知:

cancelNotification(String key):是 API >= 21 才可以使用的。利用StatusBarNotification的getKey()方法来获取key并取消通知。

cancelNotification(String pkg, String tag, int id):在 API < 21 时可以使用,在 API >= 21 时使用此方法来取消通知将无效,被废弃。

2,检测监听服务是否授权

3,打开通知监听设置页面

4,被杀后再次启动时,监听不生效的问题

解决方案:利用 NotificationListenerService 先 disable 再 enable ,重新触发系统的 rebind 操作。

private void toggleNotificationListenerService() { PackageManager pm = getPackageManager(); pm.setComponentEnabledSetting(new ComponentName(this, com.fanwei.alipaynotification.ui.AlipayNotificationListenerService.class), PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP); pm.setComponentEnabledSetting(new ComponentName(this, com.fanwei.alipaynotification.ui.AlipayNotificationListenerService.class), PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP); }

该方法使用前提是 NotificationListenerService 已经被用户授予了权限,否则无效 。 而且,在 API 24 中提供了 requestRebind(ComponentName componentName) 方法来支持重新绑定。 

如有需要,请联系我VX:dk2582525775

上一篇下一篇

猜你喜欢

热点阅读