自动化之AccessibilityService原理

来源:互联网 发布:声优训练软件 编辑:程序博客网 时间:2024/06/06 07:26

辅助功能定义

对于那些由于视力、听力或其它身体原因导致不能方便使用Android智能手机的用户,Android提供了Accessibility功能和服务帮助这些用户更加简单地操作设备,包括文字转语音(不支持中文)、触觉反馈、手势操作、轨迹球和手柄操作。开发者可以搭建自己的Accessibility服务,这可以加强可用性,例如声音提示,物理反馈,和其他可选的操作模式。

随着Android版本的不断升级,AndroidAccessibility功能也越来越强大,Android 4.0版本以前,系统辅助服务功能比较单一,仅仅能过单向获取窗口元素信息,比如获取输入框用户输入内容。到Android 4.1版本以后,系统辅助服务增加了与窗口元素的双向交互,此时可以通过辅助功能服务操作窗口元素,比如点击按钮等

继承AccessibilityService类

可选

 @Override    protected void onServiceConnected() {        super.onServiceConnected();//        系统会在成功连接上你的服务的时候调用这个方法,在这个方法里你可以做一下初始化工作,例如设备的声音震动管理,也可以调用setServiceInfo()进行配置工作。    }

必需

  @Override    public void onAccessibilityEvent(AccessibilityEvent accessibilityEvent) {//        onAccessibilityEvent() - 必须。通过这个函数可以接收系统发送来的AccessibilityEvent,接收来的AccessibilityEvent是经过过滤的,过滤是在配置工作时设置的。//    }
必须

 @Override    public void onInterrupt() {        Log.i("json", "onInterrupt");//        onInterrupt() - 必须。这个在系统想要中断AccessibilityService返给的响应时会调用。在整个生命周期里会被调用多次。    }
可选

 @Override    public boolean onUnbind(Intent intent) {        return super.onUnbind(intent);//        onUnbind() - 可选。在系统将要关闭这个AccessibilityService会被调用。在这个方法中进行一些释放资源的工作。    }

在AndroidMainfest.xml配置
 <service            android:name=".AutomaticInstallationService"            android:enabled="true"            android:exported="true"            android:label="@string/automatic_installation"            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>


xml文件夹下的accessibility_service_config
<?xml version="1.0" encoding="utf-8"?><accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"    android:accessibilityEventTypes="typeNotificationStateChanged|typeWindowStateChanged|typeWindowContentChanged|typeWindowsChanged"    android:accessibilityFeedbackType="feedbackGeneric"    android:accessibilityFlags="flagDefault"    android:canRetrieveWindowContent="true"    android:description="@string/description"    android:notificationTimeout="100"    android:packageNames="com.tencent.mm" />







0 0
原创粉丝点击