acc--›Android无障碍开发框架

2023-05-16

文章目录

  • 前言
  • 框架介绍
    • 目标界面
    • 找到元素
    • 进行操作
  • 系列文章
  • 联系作者

前言

针对Android无障碍开发, 和使用场景, 封装出来一个可以适用于各种场景的快速开发框架.

框架介绍

无障碍的本质就是通过代码模拟人工操作, 所以流程很明确, 可以归纳为: 目标界面->找到操作元素->进行对应操作

所以将对应流程, 封装成对应代码, 一个通用无障碍框架就成型了.

目标界面

首先, 代码时刻要关注当前是什么界面, 比如当前是那个应用程序, 应用程序的那个界面, 界面上有哪些元素等信息.

可以通过方法getWindows获取到所有的AccessibilityWindowInfo信息, 基本上就是用户能够看到的所有应用程序信息.

android.accessibilityservice.AccessibilityService#getWindows

比如, 可以看到状态栏 导航栏 当前打开的程序 输入法 部分程序的浮窗等, 这些AccessibilityWindowInfo信息.

有了AccessibilityWindowInfo对象, 可以通过getRoot获取到AccessibilityNodeInfo对象, 再通过getPackageName获取到程序的包名, 进而就知道了是什么应用程序

android.view.accessibility.AccessibilityWindowInfo#getRoot
android.view.accessibility.AccessibilityNodeInfo#getPackageName

有了上述方法, 就可以实时获取到打开的应用程序信息.

找到元素

通过枚举AccessibilityNodeInfo节点, 可以获取到界面上所有的控件信息,其实也是AccessibilityNodeInfo信息.

找到元素就是在这些AccessibilityNodeInfo中, 判断出目标.

无障碍能够识别到的数据有限, 使用最多的就是AccessibilityNodeInfo文本信息 坐标信息 类名 状态等.

所以可以通过:

  • 匹配文本获取到对应的元素
  • 匹配坐标获取到对应的元素
  • 匹配类名获取到对应的元素, 通常类名匹配能拿到很多个元素
  • 匹配状态获取到对应的元素, 比如是否可点击 有焦点 被选中

高级一点, 还可以通过匹配child node的分布组合匹配到目标元素等.

进行操作

有了元素, 就等于有了AccessibilityNodeInfo对象, 之后的操作,请参考本人文章:

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


框架本人已经实现, 并且历经多年的实践操作, 证明了稳定性和可行性.

框架是一个解析器, 通过解析json脚本文件, 进行对应的处理.

所以可以动态下发json 动态更新json达到远程控制的效果.

如有合作意愿,请于本人联系.

系列文章

  • acc–›Android无障碍开发入门
  • acc–›Android无障碍开发常用操作
  • acc–›Android无障碍开发手势操作
  • acc–›Android无障碍开发框架

联系作者

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

acc--›Android无障碍开发框架 的相关文章

  • 如何快速自动发送FCM或APNS消息?

    我正在开发一项后端服务 通过 FCM 或 APNS 向移动应用程序发送推送通知 我想创建一个可以在一分钟内运行的自动化测试 并验证服务器是否可以成功发送通知 请注意 我不一定需要检查通知是否已送达 只需检查 FCM 或 APNS 是否已成功
  • 使用workmanager时Firestore脱机持久性错误

    我正在使用一个WorkManger定期从我的中检索信息Firestore当应用程序处于后台和前台时的数据库 此信息用于根据状态更新 UI 因此不同的状态会添加或删除 UI 的不同部分 第一次运行时效果很好 但是 一旦应用程序处于后台并且Wo
  • 类型容器“Android 依赖项”引用不存在的库 android-support-v7-appcompat/bin/android-support-v7-appcompat.jar

    我在尝试在我的项目中使用 Action Bar Compat 支持库时遇到了某种错误 我不知道出了什么问题 因为我已按照此链接中的说明进行操作 gt http developer android com tools support libr
  • android中向sqlite中插入大量数据

    目前 我必须一次向我的 Android 中插入超过 100 亿条数据 然而 内存不足的问题会使程序崩溃 sqlite 插入测试非常简单 只需使用 for 循环生成 sql 插入命令并通过 开始 和 提交 进行包装 private Array
  • 卸载后 Web 应用程序不显示“添加到主屏幕”

    这是我第一次创建网络应用程序 我设法解决了这个问题 所以我得到了实际的 chrome 提示 将其添加到主屏幕 然后我从手机上卸载了该网络应用程序 因为我想将其展示给我的同事 但是 屏幕上不再出现提示 问题 这是有意为之的行为还是我的应用程序
  • Android 30+ 中的视频捕获意图 - 只有所有者才能与待处理项目交互

    我正在尝试在我的应用程序上捕获视频 它可以在 android API 30 以下运行 但不能在 30 以上运行 似乎在 sdk 30 之后 android 不允许完全读取外部存储 作用域存储 我目前遇到这个错误 java lang Ille
  • Android 后退按钮无法与 Flutter 选项卡内的导航器配合使用

    我需要在每个选项卡内有一个导航器 因此当我推送新的小部件时 选项卡栏会保留在屏幕上 代码运行得很好 但是 android 后退按钮正在关闭应用程序而不是运行 Navigator pop import package flutter mate
  • CardView 圆角获得意想不到的白色

    When using rounded corner in CardView shows a white border in rounded area which is mostly visible in dark environment F
  • 是否可以将数组或对象添加到 Android 上的 SharedPreferences

    我有一个ArrayList具有名称和图标指针的对象 我想将其保存在SharedPreferences 我能怎么做 注意 我不想使用数据库 无论 API 级别如何 请检查SharedPreferences 中的字符串数组和对象数组 http
  • 找不到处理意图 com.instagram.share.ADD_TO_STORY 的活动

    在我们的 React Native 应用程序中 我们试图让用户根据视图 组件中的选择直接将特定图像共享到提要或故事 当我们尝试直接使用 com instagram share ADD TO FEED 进行共享时 它以一致的方式完美运行 但是
  • 在画布上绘图

    我正在编写一个 Android 应用程序 它可以在视图的 onDraw 事件上直接绘制到画布上 我正在绘制一些涉及单独绘制每个像素的东西 为此我使用类似的东西 for int x 0 x lt xMax x for int y 0 y lt
  • 是否必须删除 Intent extra?

    这可能是一个愚蠢的问题 但是是否有一条规则规定消费活动必须显式删除 Intent 额外内容 或者只有在回收 Intent 对象时才如此 换句话说 如果我总是通过执行以下操作来链接到下一个活动 Intent i new Intent MyCu
  • 使用 Android 发送 HTTP Post 请求

    我一直在尝试从 SO 和其他网站上的大量示例中学习 但我无法弄清楚为什么我编写的示例不起作用 我正在构建一个小型概念验证应用程序 它可以识别语音并将其 文本 作为 POST 请求发送到 node js 服务器 我已确认语音识别有效 并且服务
  • 你的CPU不支持NX

    我刚刚下载了 android studio 但是我遇到了一个问题 当我运行它时 它说你的 cpu 不支持 NX 我应该怎么办 NX 或实际上是 NX 处理器位 是处理器的一项功能 有助于保护您的 PC 免受恶意软件的攻击 当此功能未启用并且
  • 如何在PreferenceActivity中添加工具栏

    我已经使用首选项创建了应用程序设置 但我注意到 我的 PreferenceActivity 中没有工具栏 如何将工具栏添加到我的 PreferenceActivity 中 My code 我的 pref xml
  • 在两个活动之间传输数据[重复]

    这个问题在这里已经有答案了 我正在尝试在两个不同的活动之间发送和接收数据 我在这个网站上看到了一些其他问题 但没有任何问题涉及保留头等舱的状态 例如 如果我想从 A 类发送一个整数 X 到 B 类 然后对整数 X 进行一些操作 然后将其发送
  • Android向menuItem添加子菜单,addSubMenu()在哪里?

    我想根据我的参数以编程方式将 OptionsMenu 内的子菜单添加到 menuItem 中 我检查了android sdk中的 MenuItem 没有addSubMenu 方法 尽管你可以找到 hasSubMenu 和 getSubMen
  • .isProviderEnabled(LocationManager.NETWORK_PROVIDER) 在 Android 中始终为 true

    我不知道为什么 但我的变量isNetowrkEnabled总是返回 true 我的设备上是否启用互联网并不重要 这是我的GPSTracker class public class GPSTracker extends Service imp
  • 在activity_main.xml中注释

    我是安卓新手 据我所知 XML 中的注释与 HTML 中的注释相同 使用 形式 我想在 Android 项目的 Activity main xml 配置文件中写一些注释 但它给了我错误 值得注意的是 我使用的是 Eclipse 但目前 我直
  • 按日期对 RecyclerView 进行排序

    我正在尝试按日期对 RecyclerView 进行排序 但我尝试了太多的事情 我不知道现在该尝试什么 问题就出在这条线上适配器 notifyDataSetChanged 因为如果我不放 不会显示错误 但也不会更新 recyclerview

随机推荐

  • docker安装ES及kibana

    docker安装elasticsearch xff1a docker pull elasticsearch 7 4 2 docker pull kibana 7 4 2 xff08 可视化界面 xff0c 要与es版本保持一致 xff09
  • redis分布式锁到redisson的转变

    首先导入redis依赖 xff1a lt dependency gt lt groupId gt org springframework boot lt groupId gt lt artifactId gt spring boot sta
  • 实现Mysql事务嵌套(部分回滚)

    测试数据库表结构 xff1a CREATE TABLE 96 my user 96 96 id 96 int 11 NOT NULL AUTO INCREMENT 96 name 96 varchar 50 DEFAULT NULL 96
  • iframe框架中a标签的target失效问题,导致链接跳转到新窗口

    最近遇到一个问题很奇怪 xff0c 我用iframe搭建的页面 xff0c 页面左侧设置了菜单栏 xff0c 右侧是菜单对应的链 接内容 a标签加target实现 xff0c 但是最近发现有一个菜单链接一访问会导致所有的菜单target失效
  • http和https网页切换导致cookie失效问题

    网站先后从https和http方式登陆网站 xff0c 会导致http中cookie无法生效 xff0c 即https覆盖和http但作用域只在https中 xff0c 在http中浏览器debug中查看不到相关cookie 之前遇到这个问
  • 程序员要多跳巢才能涨工资

    不要一辈子呆死在一家公司 都是打工高薪才是王道 fs xff1a 这 篇文章的本意 xff0c 是告诉大家如何识别公司 而不是鼓励大家无脑跳槽 只有当你在一个公司略有所成的时候 xff0c 你才能有所积累 跳槽更多时候 xff0c 应该看到
  • Ajax反正现在我没怎么看懂

    AJAX即 A synchronous J avascript A nd X ML xff08 异步JavaScript和XML xff09 xff0c 是指一种创建交互式 网页应用的网页开发技术 AJAX 61 异步 JavaScript
  • ViewBinding封装基类(BaseActivity,BaseFragment)

    混淆规则 keep class 包名 databinding 使用反射 BaseActivity public class BaseActivity lt T extends ViewBinding gt extends AppCompat
  • acc--›Android无障碍开发手势操作

    文章目录 前言dispatchGesture 96 api gt 61 24 96 GestureDescriptionGestureResultCallback执行手势 DslAccessibilityGestureclick 点击dou
  • C语言基础学习——基本数据类型(float型)

    1 float型 xff08 浮点型 xff09 浮点型是用来表示小数的 xff0c 默认至少有6位有效小数 xff1b 有float xff08 单精度 xff09 xff0c double xff08 双精度 xff09 xff0c l
  • Mybatis整合Spring和SpringMVC配置文件详解

    配置文件 pom xml xff08 配置我们需要的jar包 xff09 web xml xff08 启动spring容器监听器并加载spring的xml文件 xff0c 加载springmvc前端控制器 xff09 springmvc的配
  • 高并发场景下如何保证数据库和缓存的数据一致性

    高并发场景下如何保证数据库和缓存的数据一致性 分析经典做法 分析 只要用缓存 xff0c 就可能会涉及到缓存与数据库双存储双写 xff0c 你只要是双写 xff0c 就一定会有数据一致性的问题 xff0c 那么你如何解决一致性问题 xff1
  • XmlDocument类详解

    xfeff xfeff XmlDocument类 FreeEIM XmlDocument类是 NET框架的DOC解析器 XmlDocument将XML视为树状结构 xff0c 它装载XML文档 xff0c 并在内存中构建该文档的树状结构 下
  • 1024,如果全世界程序员都消失了,会怎样?

    这两天 xff0c 有一个话题引起了程序员的广泛讨论 xff1a 年薪80W程序员相亲被鄙视 某知名互联网社区 xff0c 一网友发帖 xff0c 自己年薪80W去相亲 xff0c 竟然被鄙视不如在二本学校教书的大学老师 估计令他没想到的是
  • AI---是什么?可以做什么?

    1 AI的项目简单介绍 图像识别 描述 xff1a 给定图片 xff0c 识别图片中有什么 xff1f 算法 xff1a KNN CNN 情感分析 描述 xff1a 判断文本包含的情感是正面 负面还是中性 关键 xff1a 文本如何表示成向
  • linux 下 gb18030 转码成 utf8

    iconv f gb18030 t utf8 1 txt o 2 txt
  • ocelot+IdentityServer认证

    IdentityServer4 IdentityServer4是用于ASP NET Core的OpenID Connect和OAuth 2 0框架 具体大家可以自己搜索 xff0c 网上很多 我不想写的就推荐别人的 IdentityServ
  • 图中连通块的个数:并查集

    图的连通性问题 在地图上有若干城镇 xff08 点 xff09 xff0c 已知所有有道路直接相连的城镇对 要解决整幅图的连通性问题 比如 xff0c 随意给你两个点 xff0c 让你判断它们是否连通 xff1b 或者问你整幅图一共有几个连
  • 依赖注入

    举个例子 xff0c 组件A中有类ClassA xff0c 组件B中有接口IB和其对应的实现类B1和B2 那么 xff0c 现在ClassA需要利用IB接口来做一些事情 xff0c 例如 xff1a public class ClassA
  • acc--›Android无障碍开发框架

    文章目录 前言框架介绍目标界面找到元素进行操作 系列文章联系作者 前言 针对Android无障碍开发 和使用场景 封装出来一个可以适用于各种场景的快速开发框架 框架介绍 无障碍的本质就是通过代码模拟人工操作 所以流程很明确 可以归纳为 目标