- 在res/xml/accessbility_service_config.xml 中配置AccessibilityServices 属性配置
android:accessibilityEventTypes:这个属性设置服务只接收的事件类型。
android:packageNames能够配置只监听的包名,不配置则是全部监听
Android官方API属性配置
android:accessibilityEventTypes=“typeWindowStateChanged|typeNotificationStateChanged|typeViewClicked|typeAllMask”
android:accessibilityFeedbackType=“feedbackGeneric”
android:accessibilityFlags=“flagReportViewIds|flagRetrieveInteractiveWindows”
android:canRetrieveWindowContent=“true”
android:canRequestFilterKeyEvents=“true”
android:description="@string/accessibility_name"
android:notificationTimeout=“100”
android:canPerformGestures=“true”
/>
事件类型(EventType):
#TYPES_ALL_MASK:所有类型
#TYPE_VIEW_CLICKED :单击
#TYPE_VIEW_LONG_CLICKED :长按
#TYPE_VIEW_SELECTED :选中
#TYPE_VIEW_FOCUSED :获取焦点
#TYPE_VIEW_TEXT_CHANGED :文字改变
#TYPE_WINDOW_STATE_CHANGED :窗口状态改变
#TYPE_NOTIFICATION_STATE_CHANGED :通知状态改变
#TYPE_VIEW_HOVER_ENTER
#TYPE_VIEW_HOVER_EXIT
#TYPE_TOUCH_EXPLORATION_GESTURE_START
#TYPE_TOUCH_EXPLORATION_GESTURE_END
#TYPE_WINDOW_CONTENT_CHANGED
#TYPE_VIEW_SCROLLED
#TYPE_VIEW_TEXT_SELECTION_CHANGED
#TYPE_ANNOUNCEMENT
#TYPE_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY
#TYPE_GESTURE_DETECTION_START
#TYPE_GESTURE_DETECTION_END
#TYPE_TOUCH_INTERACTION_START
#TYPE_TOUCH_INTERACTION_END
#TYPE_WINDOWS_CHANGED
- 继承AccessibilityService并实现其中的抽象方法。
public class AccessibilityPermissionServices extends AccessibilityService {
private static final String TAG = AccessibilityPermissionServices.class.getSimpleName();
private boolean isOpen=false;//防止开启后多次点击
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
AccessibilityNodeInfo rootInActiveWindow = getRootInActiveWindow(); //获取当前展示的窗口
if (rootInActiveWindow!=null){//查找自滚动到开发人员选项中的显示布局边界点击开关
//开发人员选项
List devInfos =rootInActiveWindow
.findAccessibilityNodeInfosByText(getString(R.string.str_developers_debug));
if (devInfos!=null &&devInfos.size()>0 ){
//显示布局边界
scrollDeveloperCllick(getString(R.string.str_show_layout), “android:id/switch_widget”,rootInActiveWindow);
}
}
}
public void scrollDevelope
rCllick(String text, String listId, AccessibilityNodeInfo rootInActiveWindow) {
if (rootInActiveWindow != null) {
List item = rootInActiveWindow.findAccessibilityNodeInfosByText(text); //根据关键字查找某控件元素
List list = rootInActiveWindow.findAccessibilityNodeInfosByViewId(listId); //根据resource id 查找容器元素;判断关键字查找出的元素是否在该容器元素中;
if (item == null || item.size() == 0) { // 关键字元素不存在,则滚动容器元素
LogUtils.D(TAG, "不存在 " + text);
if (list != null && list.size() > 0) {
tId); //根据resource id 查找容器元素;判断关键字查找出的元素是否在该容器元素中;
if (item == null || item.size() == 0) { // 关键字元素不存在,则滚动容器元素
LogUtils.D(TAG, "不存在 " + text);
if (list != null && list.size() > 0) {
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)