使用 AccessibilityService服务抢红包

本文仅做技术交流学习使用,用于其它违法行为的与本作者无关!

抢红包在前几年刚出来的时候很火,现在冷清了很多,只有在过节的时候才乐呵一下,以前和同事在一起苹果手机总是比安卓快,无论是消息来的速度,还是拆包速度,虽然我是做安卓的,这一点必须承认,不知道你承不承认呢 哈哈。
安卓开发做久了也会感觉无聊,就想搞点东西,抢红包比别人慢怎么得了,研究了一下目前抢红包的几种方法:
1、使用AccessibilityService 服务模拟点击抢红包。
2、使用Xposed插件。
3、使用微信注入的方式。

第二种,第三种无论从速度还是从限制来说都是最快的,但是也有弊端,使用xposed方法,需要手机先root然后按照xposed框架,然后装插件,对于懂得人不麻烦,经常玩机的人来说也不是什么费劲事,但是对于普通人来说简直一脸蒙蔽,例如:你女朋友说给我找个抢红包快点的软件,你跟她说,你先root一下,可能还要清空手机,然后在安装一个软件,如果这些你都包下来,估计也得倒腾一会,毕竟现在有些厂商还关闭了解BL(BootLoader)锁,导致了不能刷机。第三种方法呢,需要注入微信,这种微信更新你就要更新,而且还容易被封。 这两种都是喜欢折腾玩机的人弄得。

使用AccessibilityService 服务,主要是通过监听状态栏消息,如果有微信红包字样那么模拟点击状态栏,跳转到红包页面,找到红包,然后点开即可。微信打开通知权限,还要显示消息详情,软件自身还要保持在后台运行不能被系统杀死,所以也是入门最低限制最多的方法。

首先要 新建一个 服务 继承 AccessibilityService,然后使用onAccessibilityEvent(AccessibilityEvent event) 方法,还需要在xml文件夹下面配置一个config.xml文件

<?xml version="1.0" encoding="utf-8"?>  
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"  
     
    
    android:accessibilityEventTypes="typeNotificationStateChanged|typeWindowStateChanged|typeWindowContentChanged"
    android:accessibilityFeedbackType="feedbackGeneric"  
    android:accessibilityFlags=""  
    android:canRetrieveWindowContent="true"  
    android:description="@string/service_description"
    android:notificationTimeout="100"
    android:packageNames="com.tencent.mm,com.tencent.mobileqq" />  

大致这样,如果你想监听微信 那么久在android:packageNames 中加入微信的包名,你还想监听QQ,那么就用逗号隔开,把QQ的包名也写进去,android:description的描述有什么用呢,看这里:

辅助开关下面的一行解释说明的小字 就是android:description 描述的内容,android:accessibilityEventTypes就是你要监听的事件变化,例如:页面内容变化,或者页面跳转的变化等。

然后我们的主要逻辑就都在这个函数中  onAccessibilityEvent(AccessibilityEvent event),首先可以用一个if判断 

        if (event.getPackageName().equals("com.tencent.mm")) {

			//do something....
}


然后判断是否是通知栏事件 

if(event.getEventType() == AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED){
		//如果是通知栏事件,那么获取通知内容是否包含微信红包字样

		      List<CharSequence> texts = event.getText();

                for (CharSequence t : texts) {
					
					if(t.toString().contains("微信红包")){
							//do something......
					}
				
			}

}

获取到了微信红包后,就要做模拟点击事件了,说白了,就是打开通知
 

    public void handleNotificationChange(AccessibilityEvent event) {
        if (event.getParcelableData() != null && event.getParcelableData() instanceof Notification) {
            Notification notification = (Notification) event.getParcelableData();
            PendingIntent pendingIntent = notification.contentIntent;
            try {
                pendingIntent.send();
            } catch (PendingIntent.CanceledException e) {
                e.printStackTrace();
            }
        }
    }

打开通知后一定是进入到了微信聊天界面,在聊天界面找到红包并打开
 


微信红包都是带有 "微信红包"字样

这时候可以使用 

        AccessibilityNodeInfo nodeInfo = getRootInActiveWindow();
        List<AccessibilityNodeInfo> list = nodeInfo.findAccessibilityNodeInfosByText("微信红包");

如果 list不为null那么就找到了相应的控件 遍历 list 做下模拟点击操作即可
 

list(i). performAction(AccessibilityNodeInfo.ACTION_CLICK);

点开后 会进入 拆红包页面
 

这时可以借助ADM工具 看一下页面的结构,发现这个页面就一个Button,所以要点击拆这个按钮,可以
直接找到这个按钮模拟点击即可

        AccessibilityNodeInfo nodeInfo = getRootInActiveWindow();
                for (int i = 0; i < nodeInfo.getChildCount(); i++) {
            AccessibilityNodeInfo child = nodeInfo.getChild(i);
            if (child.getClassName().equals(“android.widget.Button”)) {
                    child.performAction(AccessibilityNodeInfo.ACTION_CLICK);
            }
        }

这样就抢完了,也可以加一些细节判断在里面,例如:读到了红包上面的某些字 自动略过红包,写好的抢红包软件可以拿去直接用 下载链接

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值