创建一个无障碍服务 现在清单文件里声明 以便android 系统把此应用程序作为无障碍服务处理
为了兼容android 4.1 以及更高版本 文件中必须声明BIND_ACCESSIBILITY_SERVICE
<application>
<service
android:name=".services.GetInFoService"
android:enabled="true"
android:exported="true"
android:label="@string/app_name"
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/my_services_config" />
</service>
</application>
文中的@xml/my_services_config
实在资源文件夹里创建的xml 如图:
·my_services.config 文件 内容·
<?xml version="1.0" encoding="utf-8"?>
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
android:accessibilityEventTypes="typeAllMask"
android:accessibilityFeedbackType="feedbackGeneric"
android:accessibilityFlags=""
android:canRetrieveWindowContent="true"
android:description="@string/accessibility_description"
android:notificationTimeout="100"
android:packageNames="com.projectprint.pver.hemupro" />
packageNames :监听你app 的包名 多个包可用 “,”
隔开例如:com.tencent.mobileqq,com.projectprint.pver.hemupro
代码:
public class GetInFoService extends AccessibilityService {
@Override
public void onAccessibilityEvent(AccessibilityEvent accessibilityEvent) {
// 获取激活当前窗体的激活点应用的节点
if (getRootInActiveWindow() == null) {
return;
}
List<AccessibilityNodeInfo> mList = getRootInActiveWindow().findAccessibilityNodeInfosByText("Hello"); //根据文字差早
for (AccessibilityNodeInfo aInfo : mList) {
// 执行按钮点击行为
if ( aInfo.getClassName().equals("android.widget.TextView")&& aInfo.isEnabled()) {
aInfo.performAction(AccessibilityNodeInfo.ACTION_CLICK);//执行命令
}
}
int eventType = event.getEventType();
switch (eventType) {
case AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED:// 通知栏事件
break;
case AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED://窗体状态改变
break;
case AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED://View获取到焦点
break;
case AccessibilityEvent.TYPE_GESTURE_DETECTION_START:
break;
case AccessibilityEvent.TYPE_GESTURE_DETECTION_END:
break;
case AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED:
break;
case AccessibilityEvent.TYPE_VIEW_CLICKED:
break;
case AccessibilityEvent.TYPE_VIEW_TEXT_CHANGED:
break;
case AccessibilityEvent.TYPE_VIEW_SCROLLED:
break;
case AccessibilityEvent.TYPE_VIEW_TEXT_SELECTION_CHANGED:
break;
}
}
@Override
public void onInterrupt() {
Log.e("Tag","interrupt");
}
}
aInfo.performAction 方法允许无障碍服务在应用中执行操作 如果无障碍服务需要去执行全局操作 例如导航到主屏幕案件返回打开屏幕通知或者最近应用列表 使用 performGlobalAction
启动 把 辅助功能对应的这个app辅助模式开启即可启动改服务
getEventType() 该事件类型
getSource() 获取事件源对应的结点信息
getClassName() 获取事件源对应类的类型
getText() 获取事件源的文本信息
isEnabled() 事件源(对应的界面控件)是否处在可用状态
getItemCount() 如果事件源是树结构,将返回该树根节点下子节点的数量