acc--›Android无障碍开发常用操作
文章目录
- 前言
- AccessibilityNodeInfo
- 获取输入焦点 `api>=14`
- 清理输入焦点 `api>=14`
- 选中 `api>=14`
- 清理选中 `api>=14`
- 点击 `api>=16`
- 长按 `api>=16`
- 获取无障碍焦点 `api>=16`
- 清理无障碍焦点 `api>=16`
- 向前滚动 `api>=16`
- 向后滚动 `api>=16`
- 复制选中内容 `api>=18`
- 粘贴剪切板内容 `api>=18`
- 剪切剪切板内容 `api>=18`
- 设置节点文本 `api>=21`
- 更多请查看api文档
- AccessibilityService
- 回退 `api>=16`
- 首页 `api>=16`
- 打开最近使用程序 `api>=16`
- 打开通知栏 `api>=16`
- 打开通知栏快速设置 `api>=17`
- 打开电源常见对话框 `api>=21`
- 打开分屏 `api>=24`
- 锁屏 `api>=28`
- 截屏 `api>=28`
- 常用操作
- 判断节点是否激活 `api>=14`
- 判断节点是否可以点击 `api>=14`
- 判断节点是否可以长按 `api>=14`
- 判断节点是否可以滚动 `api>=14`
- 判断节点是否选中 `api>=14`
- 判断节点是否是密码输入框 `api>=14`
- 判断节点是否可以复选 `api>=14`
- 判断复选状态 `api>=14`
- 判断节点是否可以获取焦点 `api>=14`
- 判断焦点状态 `api>=14`
- 判断节点是否对用户可见 `api>=16`
- 获取节点的文本信息
- getText `api>=14`
- getContentDescription `api>=14`
- getHintText `api>=26`
- getPaneTitle `api>=28`
- getTooltipText `api>=28`
- 获取节点控件的id `api>=18`
- 获取节点在屏幕中的位置 `api>=14`
- 获取节点的类型/类名 `api>=14`
- 枚举节点
- 更多请查看api文档
- 系列文章
- 联系作者
前言
无障碍开发中,有个很重要的对象AccessibilityNodeInfo,之后的操作90%都是通过这个对象完成的.
获取AccessibilityNodeInfo对象有2中方式:
- 被动通过
onAccessibilityEvent回调获取:
通过
onAccessibilityEvent回调,获取到AccessibilityEvent对象,再通过AccessibilityEvent.getSource()方法获取AccessibilityNodeInfo对象.
- 主动通过
AccessibilityService对象获取:
直接通过
AccessibilityService#getRootInActiveWindow方法获取AccessibilityNodeInfo或者通过AccessibilityService#getWindows获取到AccessibilityWindowInfo对象, 再通过AccessibilityWindowInfo#getRoot获取AccessibilityNodeInfo对象.
注意
大部分操作均支持在子线程中执行.
AccessibilityNodeInfo
AccessibilityNodeInfo对象用来操作控件,比如点击某个控件 输入控件的文本等.
执行操作的函数签名:
android.view.accessibility.AccessibilityNodeInfo#performAction(int)
API文档
获取输入焦点 api>=14
performAction(AccessibilityNodeInfo.ACTION_FOCUS)
清理输入焦点 api>=14
performAction(AccessibilityNodeInfo.ACTION_CLEAR_FOCUS)
选中 api>=14
performAction(AccessibilityNodeInfo.ACTION_SELECT)
清理选中 api>=14
performAction(AccessibilityNodeInfo.ACTION_CLEAR_SELECTION)
点击 api>=16
performAction(AccessibilityNodeInfo.ACTION_CLICK)
长按 api>=16
performAction(AccessibilityNodeInfo.ACTION_LONG_CLICK)
获取无障碍焦点 api>=16
performAction(AccessibilityNodeInfo.ACTION_ACCESSIBILITY_FOCUS)
清理无障碍焦点 api>=16
performAction(AccessibilityNodeInfo.ACTION_CLEAR_ACCESSIBILITY_FOCUS)
向前滚动 api>=16
无法滚动时, 会返回失败.
performAction(AccessibilityNodeInfo.ACTION_SCROLL_FORWARD)
向后滚动 api>=16
无法滚动时, 会返回失败.
performAction(AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD)
复制选中内容 api>=18
performAction(AccessibilityNodeInfo.ACTION_COPY)
粘贴剪切板内容 api>=18
performAction(AccessibilityNodeInfo.ACTION_PASTE)
剪切剪切板内容 api>=18
performAction(AccessibilityNodeInfo.ACTION_CUT)
设置节点文本 api>=21
Bundle arguments = new Bundle();
arguments.putCharSequence(AccessibilityNodeInfo.ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE,"android");
performAction(AccessibilityNodeInfo.ACTION_SET_TEXT, arguments)
更多请查看api文档
API文档
AccessibilityService
AccessibilityService对象可以用来执行直接全局性的操作, 比如按手机home键, 按手机back键, 截屏键等.
执行操作的函数签名:
android.accessibilityservice.AccessibilityService#performGlobalAction
API文档
回退 api>=16
performGlobalAction(AccessibilityService.GLOBAL_ACTION_BACK)
首页 api>=16
performGlobalAction(AccessibilityService.GLOBAL_ACTION_HOME)
打开最近使用程序 api>=16
performGlobalAction(AccessibilityService.GLOBAL_ACTION_RECENTS)
打开通知栏 api>=16
performGlobalAction(AccessibilityService.GLOBAL_ACTION_NOTIFICATIONS)
打开通知栏快速设置 api>=17
performGlobalAction(AccessibilityService.GLOBAL_ACTION_QUICK_SETTINGS)
打开电源常见对话框 api>=21
performGlobalAction(AccessibilityService.GLOBAL_ACTION_POWER_DIALOG)
打开分屏 api>=24
performGlobalAction(AccessibilityService.GLOBAL_ACTION_TOGGLE_SPLIT_SCREEN)
锁屏 api>=28
performGlobalAction(AccessibilityService.GLOBAL_ACTION_LOCK_SCREEN)
截屏 api>=28
performGlobalAction(AccessibilityService.GLOBAL_ACTION_TAKE_SCREENSHOT)
常用操作
判断节点是否激活 api>=14
android.view.accessibility.AccessibilityNodeInfo#isEnabled
判断节点是否可以点击 api>=14
android.view.accessibility.AccessibilityNodeInfo#isClickable
判断节点是否可以长按 api>=14
android.view.accessibility.AccessibilityNodeInfo#isLongClickable
判断节点是否可以滚动 api>=14
android.view.accessibility.AccessibilityNodeInfo#isScrollable
判断节点是否选中 api>=14
android.view.accessibility.AccessibilityNodeInfo#isSelected
判断节点是否是密码输入框 api>=14
android.view.accessibility.AccessibilityNodeInfo#isPassword
判断节点是否可以复选 api>=14
android.view.accessibility.AccessibilityNodeInfo#isCheckable
判断复选状态 api>=14
android.view.accessibility.AccessibilityNodeInfo#isChecked
判断节点是否可以获取焦点 api>=14
android.view.accessibility.AccessibilityNodeInfo#isFocusable
判断焦点状态 api>=14
android.view.accessibility.AccessibilityNodeInfo#isFocused
判断节点是否对用户可见 api>=16
android.view.accessibility.AccessibilityNodeInfo#isVisibleToUser
获取节点的文本信息
getText api>=14
节点的文本
androidx.core.view.accessibility.AccessibilityNodeInfoCompat#getText
getContentDescription api>=14
节点的内容描述
androidx.core.view.accessibility.AccessibilityNodeInfoCompat#getContentDescription
getHintText api>=26
节点的提示文本
androidx.core.view.accessibility.AccessibilityNodeInfoCompat#getHintText
getPaneTitle api>=28
节点窗格的标题
androidx.core.view.accessibility.AccessibilityNodeInfoCompat#getPaneTitle
getTooltipText api>=28
节点的工具提示文本
androidx.core.view.accessibility.AccessibilityNodeInfoCompat#getTooltipText
获取节点控件的id api>=18
获取到的值大概是这样的:com.ss.android.ugc.aweme:id/afy
androidx.core.view.accessibility.AccessibilityNodeInfoCompat#getViewIdResourceName
获取节点在屏幕中的位置 api>=14
android.view.accessibility.AccessibilityNodeInfo#getBoundsInScreen(android.graphics.Rect)
获取节点的类型/类名 api>=14
值:android.widget.LinearLayout
androidx.core.view.accessibility.AccessibilityNodeInfoCompat#getClassName
枚举节点
遍历所有节点, 找到目标AccessibilityNodeInfo节点, 从而进行相应的操作.
val node: AccessibilityNodeInfo
for (i in 0 until node.childCount) {val child = node.getChild(i)
}
更多请查看api文档
API文档
系列文章
- acc–›Android无障碍开发入门
- acc–›Android无障碍开发常用操作
- acc–›Android无障碍开发手势操作
- acc–›Android无障碍开发框架
联系作者
群内有各(pian)种(ni)各(jin)样(qun)的大佬,等你来撩.
点此QQ对话 该死的空格 点此快速加群


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
