第一步:配置xml文件和AccessibilityService

在res下新建xml文件夹并在其中新建accessibility_service_config.xml文件,下面是配置这个xml的代码示例

<?xml version="1.0" encoding="utf-8"?>
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
    android:accessibilityEventTypes="typeAllMask"
    android:accessibilityFeedbackType="feedbackAllMask"
    android:accessibilityFlags="flagDefault|flagReportViewIds|flagRetrieveInteractiveWindows|flagIncludeNotImportantViews"
    android:canRetrieveWindowContent="true"
    android:canPerformGestures="true"
    android:description="@string/accessibility_txt"
    android:notificationTimeout="100"
    android:packageNames="目标App包名"
    />

创建继承AccessibilityService的类,并在AndroidManifest.xml中注册和配置

        <service
            android:name="com.jbjtech.dyclickdemo.service.FloatDialogService"
            android:enabled="true"
            android:exported="false"
            android:foregroundServiceType="mediaProjection"
            android:label="描述"
            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_config" />
        </service>

第二步:获取界面里的控件属性

执行模拟点击,你首先需要获取目标App界面里的控件id,获取这些元素的方法有很多,下面介绍两种。

1.真机获取,使用Android Studio 3.0以后弃用Android Device Monitor,如果你的AS版本大于3.0,那么你可以在sdk的安装目录下找到tools文件夹,并在其中找到monitor.bat并打开。在monitor中选择手机,点击红圈。(不一定能成功获取,多尝试)

48a6b34e97864074bc6b8e19c387c958.png

 2.使用模拟器+Layout Inspector(模拟器已root,可随意获取)

6328508e178449829011d0a4233332c6.png

 第三步:利用获取到的控件id,执行模拟点击

在继承AccessibilityService类中重写的onAccessibilityEvent(AccessibilityEvent event)方法里获取根AccessibilityNodeInfo

    @Override
    public void onAccessibilityEvent(AccessibilityEvent event) {
        int eventType = event.getEventType();
        switch (eventType) {
            case AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED:
                AccessibilityOperate.getOperate().updateEvent(this, event);
                AccessibilityNodeInfo nodeInfo 
                    = FloatDialogService.this.getRootInActiveWindow();
                break;
        }
    }

利用我们找到的控件id以及根AccessibilityNodeInfo的findAccessibilityNodeInfosByViewId(viewId)方法找到控件的List<AccessibilityNodeInfo>。

让控件的List<AccessibilityNodeInfo>中子AccessibilityNodeInfo执行performAction(AccessibilityNodeInfo.ACTION_CLICK)方法实现模拟点击。

    public boolean performClick(List<AccessibilityNodeInfo> nodeInfo) {
        AccessibilityNodeInfo node;
        for (int i = 0; i < nodeInfo.size(); i++) {
            node = nodeInfo.get(i);
            if (node.isEnabled() && node.isClickable()) {
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
                    return node.performAction(AccessibilityNodeInfo.ACTION_CLICK);
                }
            }
        }
        return false;
    }

判断控件的List<AccessibilityNodeInfo>是否展示

    public boolean isTargetViewShow(List<AccessibilityNodeInfo> infos) {
        if (infos != null && infos.size() > 0) {
            return true;
        }
        return false;
    }

你能找到的控件id,以及具体点击顺序,可以根据自己喜好来设定。

demo下载地址:利用AccessibilityService实现抖Y直播间自动秒抢红包Demo-Android文档类资源-CSDN下载

App下载地址:

看播便利助手

​​​​​​​完毕

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐