美文网首页
Android自动化之AccessibilityService模

Android自动化之AccessibilityService模

作者: 桑心剑 | 来源:发表于2018-01-25 15:40 被阅读0次

    AccessibilityService是Android官方给出的一个无障碍辅助的API,可以实现一系列Android自动化行为,诸如自动化测试、自动抢红包、自动安装应用、清理系统运存、劫持浏览器、等等。

    AccessibilityService快速集成

    继承系统AccessibilityService

    AccessibilityService是抽象类,要实现它的抽象方法。

    public class MyAccessibilityService extends AccessibilityService {
    
        private static final String TAG = "MyAccessibilityService";
    
        @Override
        public void onAccessibilityEvent(AccessibilityEvent event) {
            //此处写事件的处理,常用eventType和className来做判断。
            int eventType = event.getEventType();
            String className = event.getClassName().toString();
            Log.d(TAG, "当前事件类型:" + eventType);
            Log.d(TAG, "当前执行类名:" + className);
            //根据不同的eventType和className,来进行具体的事件处理
            
        }
    
        @Override
        public void onInterrupt() {
    
        }
    }
    
    写配置文件

    有两种方式,一种是在资源文件夹下新建xml文件夹,然后新建一个xml格式的文件来写配置。

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

    accessibilityEventTypes:要监听的事件类型。
    accessibilityFeedbackType:反馈方式,有语音播出和振动。
    description:开启服务处处看到的描述信息。
    packageNames:要监控的应用的包名,多应用包名用英文逗号隔开。
    配置文件的其他属性含义参考:
    http://blog.csdn.net/zhou452840622/article/details/51734677

    另一种方式是复写AccessibilityService中的onServiceConnected方法,在里面设置参数信息。参数含义与xml形式的配置的属性一一对应。
    该方法可以在运行期间动态修改服务配置。
    注意:动态配置方法只能用来配置动态属性:eventTypes,feedbackType,flags,notificaionTimeout及packageNames。

    @Override
    protected void onServiceConnected() {
        // 如果仅仅在此处配置,就new一个AccessibilityServiceInfo;
        AccessibilityServiceInfo serviceInfo = new AccessibilityServiceInfo();
    
        // 如果需要与xml配置方式混用,就用getServiceInfo
        // AccessibilityServiceInfo serviceInfo = getServiceInfo();
        serviceInfo.eventTypes = AccessibilityEvent.TYPES_ALL_MASK;
        serviceInfo.feedbackType = AccessibilityServiceInfo.FEEDBACK_GENERIC;
        serviceInfo.packageNames = new String[] { "com.tencent.mm","com.android.systemui" };
        serviceInfo.notificationTimeout = 100;//单位:毫秒
        //设置配置
        setServiceInfo(serviceInfo);
    
        super.onServiceConnected();
    }
    
    注册服务

    与一般服务注册方式基本一致,如果是使用xml来写的配置,则在AndroidManifest.xml中注册的同时,用meta-data标签配置。
    注意:
    1、meta-data标签只对4.0以上系统可用,如需兼容4.0以下,可以用代码动态的来配置。
    2、不能在一个service里同时写两个或多个这样的配置文件,一次只能写一个meta-data标签,比较复杂的业务逻辑可以用动态配置的方式来控制。

    <service
        android:name="com.sk.androidauto.service.MyAccessibilityService"
        android:enabled="true"
        android:exported="true"
        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_systemui" />
        //不能在一个service里同时写两个或多个这样的配置文件,一次只能写一个meta-data标签,比较复杂的业务逻辑可以用动态配置的方式来控制
        <!-- <meta-data -->
        <!-- android:name="android.accessibilityservice" -->
        <!-- android:resource="@xml/accessibility_wx" /> -->
    </service>
    
    手动启用服务

    安装完实现了AccessibilityService的应用后,需要到系统的“设置--其他高级设置--辅助功能”里找到该应用,“开启服务”。
    不需要在代码里start或bind。



    至此,AccessibilityService已经集成完成,可以根据自己的业务逻辑来写代码了。

    使用AccessibilityService来自动模拟操作的常用操作和注意点参考我的另一篇文章:
    Android自动化之AccessibilityService模拟操作(经验总结)
    另外,AccessibilityService使用起来受限很大,不能做到诸如随意点击屏幕任意一点等操作,许多情况下,可能还需要结合adb命令来共同实现某些操作,使用adb命令来自动模拟操作请参考:
    Android自动化之adb模拟操作(可实现按键精灵和手机输入法)

    相关文章

      网友评论

          本文标题:Android自动化之AccessibilityService模

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