acc--›Android无障碍开发常用操作

前言

无障碍开发中,有个很重要的对象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文档

系列文章


联系作者

群内有各(pian)种(ni)各(jin)样(qun)的大佬,等你来撩.

点此QQ对话 该死的空格 点此快速加群

  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值