1.原理
本文不讲原理,直接上干货!!! 原理可自行学习。
2.使用
(1)自定义MyAccessibilityService,继承自AccessibilityService类,需要实现该类的两个接口:
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
}
@Override
public void onInterrupt() {
}
(2) AndroidManifest.xml 中的配置如下:
首先,添加系统权限:
<uses-permission
android:name="android.permission.BIND_ACCESSIBILITY_SERVICE"
tools:ignore="ProtectedPermissions" />
MyAccessibilityService服务的配置如下:
<service android:name=".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_service_config" />
</service>
其中
- android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"
- <action android:name="android.accessibilityservice.AccessibilityService" />
- android:name="android.accessibilityservice"
均为固定写法。
(3)res/xml 文件夹下,新建accessibility_service_config.xml文件
其主要功能是对该服务进行一些设置:
<?xml version ="1.0" encoding ="utf-8"?><!-- Learn More about how to use App Actions: https://developer.android.com/guide/actions/index.html -->
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
android:packageNames="com.ss.android.ugc.aweme"
android:accessibilityEventTypes="typeAllMask"
android:accessibilityFeedbackType="feedbackAllMask"
android:notificationTimeout="100"
android:canRetrieveWindowContent="true"
android:canPerformGestures="true"/>
packageNames
:表示对该服务是用来监听哪个包的产生的事件accessibilityEventTypes
:表示该服务对界面中的哪些变化感兴趣,即哪些事件通知,比如窗口打开、滑动、焦点变化、长按等,具体的值可以在AccessibilityEvent类中查到,如typeAllMask表示接受所有的事件通知。accessibilityFeedbackType
:表示反馈方式,比如是语音播放、震动,feedbackllask表是可以实现所有的反馈形式。
canRetrieveWindowContent
:表示该服务能否访问活动窗口中的内容,也就是说如果希望在服务中获取窗体的内容,则需要设置其值为true。notificationTimeout
:接受事件的时间间隔,通常将其设置为100即可。- canPerformGestures:是否支持手势,上划、下划等。
3. 默认开启你的无障碍服务
在源码中修改,路径为:frameworks\base\packages\SettingsProvider\src\com\android\providers\settings\DatabaseHelper.java
在loadSecureSettings函数中添加如下代码:
loadSetting(stmt, Settings.Secure.ACCESSIBILITY_ENABLED, 1);
loadSetting(stmt, Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES,“格式”);
格式:com.android.zgrmhx/com.android.zgrmhx.service.MyAccessibilityService