AccessbilityService实现第三方软件的点击

来源:互联网 发布:制作身份证软件下载 编辑:程序博客网 时间:2024/05/21 18:50
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);}
0 0
原创粉丝点击