public abstract class AccessibilityService extends Service
java.lang.Object
Android.content.Context
android.content.ContextWrapper
android.app.Service
android.accessibilityservice.AccessibilityService
AccessibilityService继承了service,我们可以得知他是在后台运行的。那么这个对象应该也有Service的生命周期吧!
public class IAccessbilityService extends AccessibilityService {
/**
* 当启动服务的时候就会被调用
*/
@Override
protected void onServiceConnected() {
super.onServiceConnected();
}
/**
* 监听窗口变化的回调
*/
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
}
/**
* 中断服务的回调
*/
@Override
public void onInterrupt() {
}
}
使用这个打开启动服务的界面
try {
Intent intent = new Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS);
startActivity(intent);
} catch (Exception e) {
e.printStackTrace();
}
下面3个图是执行步骤:
当你点击了确认后就会回调执行onServiceConnected这个函数,那么什么时候会调用onAccessibilityEvent这个函数呢?说这个之前我们先来配置一下AccessibilityService服务。
配置文件的步骤:
1.创建类继承AccessibilityService
2.配置AccessibilityService服务就如同配置Service一样
3.配置AccessibilityService的xml文件
第一步我们已经配置了,我们配置第二步:
这个配置跟service配置很相似,android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"配置打开绑定服务的权限.
这个是配置AccessibilityServiceInfo这个对象。name必须是android.accessibilityservice,resource是配置xml资源。
我们分析xml的所有属性:
这个的时候,那么我们也可以设置
private String[] packageNames = { "com.android.packageinstaller",
"com.lenovo.security", "com.lenovo.safecenter" };
@Override
protected void onServiceConnected() {
super.onServiceConnected();
AccessibilityServiceInfo mAccessibilityServiceInfo = new AccessibilityServiceInfo();
// 响应事件的类型,这里是全部的响应事件(长按,单击,滑动等)
mAccessibilityServiceInfo.eventTypes = AccessibilityEvent.TYPES_ALL_MASK;
// 反馈给用户的类型,这里是语音提示
mAccessibilityServiceInfo.feedbackType = AccessibilityServiceInfo.FEEDBACK_SPOKEN;
// 过滤的包名
mAccessibilityServiceInfo.packageNames = packageNames;
setServiceInfo(mAccessibilityServiceInfo);
}
通过setServiceInfo这个函数也可以配置AccessibilityServiceInfo.