美文网首页
Android端微信抢红包简单实现

Android端微信抢红包简单实现

作者: 5e1b18effb55 | 来源:发表于2016-10-19 15:37 被阅读0次

调用Android的无障碍服务
实现很简单,就是写一个服务,继承

AccessibilityService

在服务里面做一些操作
首先在你的 AndroidManifest.xml 文件中,把所有的

<activity></activity>

节点全部删除掉,创建一个

<service></service>

节点,配置如下:

<service
    android:name=".RobMoneyService"
    android:enabled="true"
    android:exported="true"
    android:label="@string/app_name"
    android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
    <intent-filter>
        <action android:name="android.accessibilityservice.AccessibilityService" />
    </intent-filter>
    <meta-data
        android:name="android.accessibilityservice"
        android:resource="@xml/accessibility" />
</service>

我们看到,其中引用了xml文件夹下的accessibility文件,这个文件是配置你的后台服务是注册了那个应用,比如你想抢微信红包,或者想抢QQ红包,或者不管微信还是QQ你都想在第一时间内抢到,那么你就可以给距下面的样式写自己的accessibility.xml文件了

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

里面有许多属性,那么

accessibilityEventTypes

是设置事件相应类型的,参数大概有下面这些:


accessibilityFeedbackType

是设置回馈给用户的方式的,有震动和语音播报,参数大概有下面一些:


canRetrieveWindowContent

表示你的服务能否获取到窗口中的内容,参数是boolean值,另外一些就见名知意了,不再赘述。。

接下来就要重写我们的服务类了,,,在继承

AccessibilityService

之后,需要重写

onAccessibilityEvent(AccessibilityEvent accessibilityEvent)
onInterrupt()

两个方法,由名字我们就可以知道,后一个是服务中断时使用,这里我们用不到,主要看第一个方法,参数列表里面就一个参数,是一个

AccessibilityEvent

类型的参数,那么我们可以通过这一个对象获得事件类型,再由事件类型判断接下来需要做什么样的工作,,,

我么知道,在锁屏的时候,有红包发过来,通知栏会有提示,那么我们就通过通知栏的提示来打开抢红包界面,,我们可以这样写:

int eventType = accessibilityEvent.getEventType();
switch (eventType) {
    case AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED:
break;

通过switch过滤不同的事件,这里我们就监听了通知栏改变时的事件。。

那么微信发来红包之后,在通知栏都会有

[微信红包]

这个字样,我们就利用他判断是不是微信红包,如果有这个字样,我们就打开通知进入抢红包界面,实现代码如下:

case AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED:
    //检测通知栏是否有  [微信红包]   字样
    List<CharSequence> texts = accessibilityEvent.getText();
    if (!texts.isEmpty()) {
        for (CharSequence text : texts) {
            String content = text.toString();
            Log.i("demo", "text:" + content);
            if (content.contains("[微信红包]")) {
                //模拟打开通知栏消息
                if (accessibilityEvent.getParcelableData() != null
                        && accessibilityEvent.getParcelableData() instanceof Notification) {
                    Notification notification = (Notification) accessibilityEvent.getParcelableData();
                    PendingIntent pendingIntent = notification.contentIntent;
                    try {
                        pendingIntent.send();
                    } catch (PendingIntent.CanceledException e) {
                        e.printStackTrace();                    
                    }
                }
            }
        }
    }
break;

通过pendingIntent的send()方法,打开界面。。

接下来就开始打开红包了,,,可是,,以前版本的微信抢红包是这样子的



在拆红包的按钮上有三个字,我们可以通过控件的内容获取控件,并打开,,
可是啊可是,微信为了防止抢红包的第三方,把按钮属性做了一些操作,现在是这个样子



参数改成了下面这样:

按钮的内容跟描述都取消了,怎么办!!!

不用怕,不管腾讯怎么做手脚,控件的id都会在,我们可以通过id来获得控件,并添加点击,那么怎么实现呢???
上代码~~

private void openPacket() {
    AccessibilityNodeInfo nodeInfo = getRootInActiveWindow();
    if (nodeInfo != null) {
    AccessibilityNodeInfo nodeInfosById = findNodeInfosById(nodeInfo, "com.tencent.mm:id/ba_");
        if (nodeInfosById !=null) {
            nodeInfosById.performAction(AccessibilityNodeInfo.ACTION_CLICK);
        }
    }
}

就是这样了,红包打开喽。。。

相关文章

网友评论

      本文标题:Android端微信抢红包简单实现

      本文链接:https://www.haomeiwen.com/subject/slyxuttx.html