AccessbilityService实现第三方软件的点击

本文介绍了如何利用AccessibilityService监听并模拟点击第三方应用的事件。通过创建自定义的AccessibilityService,重写onAccessibilityEvent方法,针对不同类型的事件进行处理。在清单文件中注册服务,并在click_config.xml中配置要监控的包名。通过 AccessibilityNodeInfo 找到目标节点并执行ACTION_CLICK,从而实现对应用的自动化操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

AccessibilityService
2.2016/8/11
1.自定义一个类继承AccessibilityService,重写onAccessibilityEvent()。监控事件状态。
 private static final String TAG = "MyAccessibility";
    @SuppressLint("NewApi")
    @Override
    public void onAccessibilityEvent(AccessibilityEvent event) {
            // TODO Auto-generated method stub
        int eventType = event.getEventType();
        String eventText = "";
        Log.i(TAG, "==============Start====================");
        switch (eventType) {
            case AccessibilityEvent.TYPE_VIEW_CLICKED:
                    eventText = "TYPE_VIEW_CLICKED";
                    break;
            case AccessibilityEvent.TYPE_VIEW_LONG_CLICKED:
                    eventText = "TYPE_VIEW_LONG_CLICKED";
                    break;
            case AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED:
                    eventText = "TYPE_WINDOW_STATE_CHANGED";
                    break;
            case AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED:
                    eventText = "TYPE_NOTIFICATION_STATE_CHANGED";
                    break;
//          case AccessibilityEvent.CONTENT_CHANGE_TYPE_SUBTREE:
//                  eventText = "CONTENT_CHANGE_TYPE_SUBTREE";
//                  break;
            }
            Log.i(TAG, eventText);
            Log.i(TAG, "=============END=====================");

             if(eventText =="TYPE_NOTIFICATION_STATE_CHANGED"){
                performClick("权叔叔");
            }
             if(eventText == "TYPE_WINDOW_STATE_CHANGED"){

             }
            }

2.在清单文件注册service信息
<service
    android:label="@string/app_name"
    android:name=".MyAccessibility"
    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/click_config"/>
</service>

3.上面的xml/click_config文件,在res下新建一个XML文件。
android:packageNames:需要监控的包名,可以填多个,用,分开。
<?xml version="1.0" encoding="utf-8"?>
<accessibility-service
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:description="@string/click_auto"
    android:accessibilityEventTypes="typeNotificationStateChanged|typeWindowStateChanged"
    android:packageNames="com.tencent.mm"
    android:accessibilityFeedbackType="feedbackGeneric"
    android:notificationTimeout="100"
    android:accessibilityFlags=""
    android:canRetrieveWindowContent="true"/>

4.通过文本查找控件节点或资源ID,然后拿到节点执行 targetNode.performAction(AccessibilityNodeInfo.ACTION_CLICK);就可以实现点击了
//执行点击
private void performClick(String text) {

    Log.i("MyService","点击执行");

    AccessibilityNodeInfo nodeInfo = this.getRootInActiveWindow();
    AccessibilityNodeInfo targetNode = null;
    //通过名字获取
    //targetNode = findNodeInfosByText(nodeInfo,"广告");
    targetNode = findNodeInfosByText(nodeInfo,text);
    if (targetNode.isClickable()) {
        targetNode.performAction(AccessibilityNodeInfo.ACTION_CLICK);
    }
}

//通过文本查找
public static AccessibilityNodeInfo findNodeInfosByText(AccessibilityNodeInfo nodeInfo, String text) {
    List<AccessibilityNodeInfo> list = nodeInfo.findAccessibilityNodeInfosByText(text);
    if(list == null || list.isEmpty()) {
        return null;
    }
    return list.get(0);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值