AccessibilityService 实现自滚动指定条目实现点击效果

AccessibilityService 实现自滚动指定条目实现点击效果,第1张

AccessibilityService 实现自滚动指定条目实现点击效果
    在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) {

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5708102.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存