美文网首页
Android辅助功能基本操作

Android辅助功能基本操作

作者: Tyhj | 来源:发表于2019-12-09 14:06 被阅读0次

    在手机的设置界面,有一个叫辅助功能的设置,点击进去可以看到已安装的辅助服务,点击具体的服务进去可以看到该服务的一些描述,可以在此开启该服务,这也是唯一一个能开启服务的地方。

    辅助功能介绍

    开启辅助功能相当于开启了一个服务,在手机界面改变的时候,就能监听到该页面的一些信息并且能拿到界面的一些控件,然后可以对控件进行模拟点击,从而实现我们想要的功能。

    除此以外,不仅能够对获取到的控件进行模拟点击,在Android7.0及以上的版本,我们可以模拟任意位置的点击包括触摸、滑动等等,就是说我们可以实现任何人能够进行的操作,这个是很有用的,可以做出很多有意思的东西,如果再配上截图、录屏和图像识别,就更有意思了。

    模拟点击,就是说我们的手机界面自己动,整个流程像是一只手在帮你操作一样的;

    实现

    新建一个Service继承AccessibilityService

    public class LuckMoneyService extends AccessibilityService
    

    然后去AndroidManifest文件里面去注册一下这个Service

        <service
                android:name=".service.LuckMoneyService"
                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/accessible_service_wx_config" />
            </service>
    

    meta-data节点下有个resource值,这是个xml文件,里面配置了该辅助的一些信息,在res目录下新建一个文件夹,名字叫xml,然后新建一个xml文件,名字和resource配置的一样就行了

    <?xml version="1.0" encoding="utf-8"?>
    <accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
        android:accessibilityEventTypes="typeWindowStateChanged|typeWindowContentChanged|typeNotificationStateChanged"
        android:accessibilityFeedbackType="feedbackAllMask"
        android:accessibilityFlags="flagDefault|flagRetrieveInteractiveWindows|flagIncludeNotImportantViews|flagReportViewIds"
        android:canRetrieveWindowContent="true"
        android:canRequestFilterKeyEvents="true"
        android:description="@string/wx_luck_money"
        android:canRequestEnhancedWebAccessibility="true"
        android:notificationTimeout="20"
        android:packageNames="com.tencent.mm"
        android:canPerformGestures="true" />
    

    里面配置了一些参数,比如notificationTimeout是指定多少毫秒监听一次界面变化的,packageNames是指定监听哪个应用的,删掉这个配置就是监听全局,description是对于该辅助的描述,其他配置不管也罢。

    然后在LuckMoneyService里面重写一下onAccessibilityEvent方法

      @Override
        public void onAccessibilityEvent(AccessibilityEvent event) {
        //界面发生了变化
        }
    

    每当界面改变的时候就会回调这个方法,通过event我们就可以获取到界面的信息包括界面上的控件

    简单的用法

    //获取当前界面包名
    String packageName = event.getPackageName().toString();
    //获取当前类名
    String className = event.getClassName().toString();
    //获取当前界面父布局的控件
    AccessibilityNodeInfo accessibilityNodeInfo = getRootInActiveWindow();
    //在父布局里面根据子控件**显示的文字**找到该子控件
    List<AccessibilityNodeInfo> nodeInfoList = accessibilityNodeInfo.findAccessibilityNodeInfosByText(text);
    //在父布局里面根据子控件的**id**找到该子控件
    List<AccessibilityNodeInfo> nodeInfoList = accessibilityNodeInfo.findAccessibilityNodeInfosByViewId(id);
    //点击该控件
    nodeInfo.performAction(AccessibilityNodeInfo.ACTION_CLICK);
    

    上面的操作都比较基础,根据控件显示的文字查找控件,找出来的肯定是TextView和Button了,根据ID查找控件,ID就是指的写布局文件的时候设置的控件的ID

    模拟触摸

    模拟触摸就是可以模拟人的触摸动作,也比较简单

       protected void gestureOnScreen(Path path, long startTime, long duration,
                                       AccessibilityService.GestureResultCallback callback) {
            GestureDescription.Builder builde = new GestureDescription.Builder();
            builde.addStroke(new GestureDescription.StrokeDescription(path, startTime, duration));
            GestureDescription gestureDescription = builde.build();
            dispatchGesture(gestureDescription, callback, null);
        }
    

    可以看到需要传入path就是一个路径嘛,模拟滑动的路径,用canvas画过画的都知道这东西还是比较简单的,startTime就是多久后开始模拟事件,duration就是该滑动的时间,其他回调什么的为空就可以了;

    Monitor

    如何获取控件的ID呢,而我又是如何知道界面上有哪些控件呢,可以通过一个工具来实现,就是在sdk工具下面的一个叫monitor的工具,其实之前的AndroidStudio是带这个工具的,但是后来界面上是没有了,但是其实还在的

    /Users/Tyhj/Library/Android/sdk/tools/monitor
    

    连上手机,打开这个工具,手机上打开你要查看的界面,点击工具手机的小手机的图标,就会截屏,显示出这个界面的信息


    截屏2019-12-09上午1.00.04.png-752.2kB

    最后

    辅助功能能做的东西大概就上面这些了,能做出什么功能就靠自己的想象了
    推荐阅读:Android微信抢红包辅助

    相关文章

      网友评论

          本文标题:Android辅助功能基本操作

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