问题标签 [accessibilityservice]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
7238 浏览

java - 如何使用 AccessibilityService.getWindows() 获取可遍历的 AccessibilityNodeInfo?

我正在AccessibilityService为 Android 编写一个,直到 API 级别 20,我一直在使用该方法来获取触发时AccessibilityEvent.getSource()的可遍历。虽然结果并不总是反映屏幕的内容,但仍然可以使用它。AccessibilityNodeInfoonAccessibilityEvent(AccessibilityEvent event)AccessibilityNodeInfo

从 API 级别 21 开始,newAccessibilityService.getWindows()应该不仅能够更好地表示视图层次结构(即尊重 Z 顺序),而且还应该能够公开一个包含当前视图中所有视图的节点输入法(IME)。我想利用这一点,但我无法这样做,我不知道我到底做错了什么。顺便说一句,除了极少的 java 文档之外,我无法找到有关如何执行此操作的任何更详细的信息。

我已经做了以下事情:

  • 配置服务以检索窗口内容 ( android:canRetrieveWindowContent="true")
  • 添加flagRetrieveInteractiveWindows到服务标志

我的代码如下:

其中 getNodesFromWindows() 执行以下操作:

在此之后,updateTargetLeafs()将所有可点击、启用和可见的节点收集到一个单独的节点中,AccessibilityNodeInfo ArrayList以便我可以随意索引和访问它们(见下文)。在 API 级别 20 及以下使用AccessibilityEvent.getSource()时,此数组的大小始终接近屏幕上的视图数,但当我使用时AccessibilityService.getWindows(),大小几乎总是 1(有时为 0),并且AccessibilityNodeInfo列表中唯一的边界总是在屏幕之外。

编辑:添加用于遍历所有节点子节点的代码(mNodes的输出在哪里getNodesFromWindows()):

奇怪,我知道,但我做错了什么?

0 投票
1 回答
1016 浏览

android - 使用accessibilityservice android获取通知消息

在我的 android 应用程序中,我想显示通知的历史记录,因此我想捕获所有通知标题和消息。我正在使用可访问性服务,并且能够使用可打包数据获取标题,但无法获取原始消息文本。

如果你有任何理想,请帮助我。

0 投票
0 回答
572 浏览

android - 在模拟器上运行时并不总是调用 AccessibilityService onUnbind

我正在为 Android 开发无障碍服务。问题是,在模拟器(Android 4.0.5 API 15)上运行时,有时关闭服务时不会调用 onUnbind。发生这种情况时,无法停止服务,我需要重新安装 apk 或重新启动模拟器。

在实际设备(Galaxy Nexus)上运行此无障碍服务时,它工作正常。我无法重现此问题。

相关服务代码如下:

问题:

  • 我错过了什么吗?
  • 我能够检测到这种情况何时发生(请参阅有关 init() 的评论)。有没有办法强制服务停止?

额外细节:

  • 该服务包括一个本机部分并产生两个线程
  • 在模拟器上它消耗 100% 的 CPU,在 Galaxy Nexus 上大约 35%
  • 第一次失败后,无论服务打开和关闭多少次,onUnbind 都不会再次调用。
0 投票
4 回答
13483 浏览

java - 以编程方式使用辅助功能服务读取通知栏标题、消息

使用辅助功能服务我能够阅读通知栏标题和消息,我面临的问题是当第一个通知出现时我正在完美阅读所有这些但在第一次通知之后我只收到标题和文本“你有 2 条消息”等等,而不是整个消息。等待您的专家建议。

代码 :

示例通知 1:

包:com.whatsapp,标题:你好,消息:你好吗

示例通知 2:

包:com.whatsapp,标题:你好,消息:你有 2 条消息(而不是:你在做什么)

0 投票
3 回答
1002 浏览

android - Are UiAutomator and AccessibilityServices not compatible?

I have an AccessibilityService (AS) running to programatically get information about what's currently displayed on the screen.

Now I want to set some UiAutomator test cases. However, if I have the AS running the UiAutomator gives the following error:

I've searched the web and I've found that lots of people have encountered this problem but no solution for it.

So is this a lack of compatibility issue or is there a way to solve it (or at least a work-around)?

Note: If you have other thoughts in how to read/access the contents of the screen without the AS I'm all ears (more eyes in this case...) but I've looked a lot for other solutions and this is the only one I got.

Thanks in advance.

If you need more information please tell me.

0 投票
0 回答
224 浏览

android - Android Accessibilty Service:onAccessibilityEvent() 方法不会一直触发

前言
设备: Nexus 5,Android Lollipop

简而言之,My App 确实捕获了 Accessibility 事件,但捕获率仅为 93% 左右。

这可能看起来不错,但对于我的应用程序设计的那种功能来说是不可接受的。

我的代码:

问题:

  1. 如果您之前曾与无障碍服务合作过,您是否观察到类似的情况?
  2. 如果丢失事件是常态,我的捕获率是否很差?
  3. 如果你克服了这个问题,请回答这个问题,我会在地球上任何地方给你买披萨......说真的!
0 投票
2 回答
3981 浏览

android - 辅助功能服务 - performGlobalAction() 返回 false

我正在创建一个调用performGlobalAction()的Android辅助功能服务onStartCommand()

我按照指南向清单添加了必要的权限。

所以我的问题是为什么函数调用返回false。什么不见​​了?顺便说一句,后退按钮按下事件没有发生。

0 投票
0 回答
1519 浏览

android - 是否可以从辅助功能事件中获取精确的触摸数据?

我目前正在尝试开发一个可以捕获用于研究的全局触摸手势的应用程序。如果可能的话,我想在不生根手机的情况下实现这一点,并且由于覆盖不能再用于此,我正试图通过带有触摸探索的可访问性服务来实现它。

目前,我能够获取包含有手势/触摸的信息的 AccessibilityEvents,如果被识别,则可以获取已执行的一般类型的滑动。

我怀疑 AccessibilityEvents 根本不包含更具体的数据,但我很想知道是否有人对此有解决方案或可以确认这是不可能的。

以下是该服务的源代码:

这是输出的一个片段:

0 投票
0 回答
505 浏览

android - 使用 install 命令安装辅助功能服务需要时间

我的Android申请遇到了一些问题。基本上,应用程序会在设备尝试移动到另一个时捕获事件Activity。这是一个家长储物柜,为了实现这一点,我正在使用Accessibility service.

中的代码AndroidManifest.xml如下所示:

因此,当我从Eclipse. 新的Accessibility service立即出现。问题是当我尝试使用以下方式安装它时:

这将成功安装应用程序,Accessibility service仅在 5 到 10 分钟后出现。我需要它立即或至少快速。这发生在 asignedunsignedAPK 上。

我几乎可以肯定该pm install命令没有在Android services. 此应用程序不会部署在 上Play Store,因此此命令(或adb install)是分发它的唯一方法。

我做错了什么还是一个真正的问题?

谢谢你的帮助。

编辑:

这是我运行后得到的pm install

在此处输入图像描述

这是 5 到 10 分钟后发生的情况:

在此处输入图像描述

0 投票
1 回答
2571 浏览

android - AccessibilityService 从 AlertDialog 更改 EditText

我在 Android 中创建了一个 AccessibilityService,我想在关注页面上的 EditText 后显示一个 AlertDialog(注意:EditText 可能来自另一个应用程序,例如登录屏幕,所以我并不总是知道 ID)。当您单击 AlertDialog 中的“确认”按钮时,它会使用文本填充该 EditText。

除了最后一部分之外,我已经完成了所有步骤......我无法弄清楚如何用文本填充 EditText。我猜有一种方法可以在某处投射 findViewByID() 方法,但我不知道如何找到 EditText 的 ID(见上文,EditText 可能来自另一个应用程序)。请参阅下面的代码,我走得远吗?下面的代码总是错误地告诉我有关密封实例的问题(无法在未密封的实例上执行此操作。)。