【问题标题】:Accessibility Service and webview?无障碍服务和网页浏览?
【发布时间】:2017-04-25 23:24:10
【问题描述】:

是否可以单击(使用 AccessibilityService)放置在 Webview 中的特定按钮?例如,某些应用程序 A 在 MainActivity 中有一个 webview。活动开始后,网页内容将加载到 webview 中。加载的网页包含带有文本“聊天”的按钮。我可以使用无障碍服务点击此按钮吗?我知道我可以点击 Android 原生小部件(android.widget.Button、TextView 等),但我不知道如何点击网页视图内网页上显示的按钮。请帮忙

【问题讨论】:

  • 您可以通过覆盖单击该按钮后获得的 URL 来执行此操作,并在该方法中执行您想做的任何事情
  • 我的应用程序包含一个光标,当我点击它执行点击的任何图标时,它会使用自己的服务运行,如果我不在我的应用程序中并操作其他包含 webview 的应用程序,则 performAction 不起作用。跨度>
  • @AkashDubey 我认为 Rohit 想要在用户不触摸屏幕的情况下点击。也来自后端服务。他如何在不触摸屏幕的情况下使用屏幕坐标获得链接上的焦点?

标签: android android-support-library accessibilityservice


【解决方案1】:

这是一个复杂的答案。是的,您可以单击视图,但是,这取决于 Web 开发人员如何实现该按钮。如果他们做了一些愚蠢的事情,比如实现 touch down touch up 监听器,而不是 onClick 监听器,它很可能会被破坏。建议:使用 TalkBack。如果它不能与 TalkBack 一起使用,您将无法执行此操作。如果是这样,以下代码应该适合您:

AccessibilityNodeInfo info = ...;

info.performAction(AccessibilityNodeInfo.ACTION_CLICK);

旁注:有传言称 Android 实现了从无障碍服务到伪造真实硬件事件的功能。到目前为止,我只在 Android 的演示中看到过这一点,并且只用于系统应用程序(具有提升的权限)。请留意完善此功能所需的 API,它们实际上可能隐藏在某个地方,但我还没有看到它们公开。

【讨论】:

  • 在 Talkback 中,如果我们启用“单击单击”,则单击对网页不起作用(在链接被前面的单击聚焦之后)。这表明 performAction(CLICK) 不适用于网页。链接适用于双击,但我猜双击是内部处理的,我们没有访问权限。
  • Single-Tap 是实验性的,我不会将其用作任何指标。
  • 是的,但是在单击时它会执行 performAction(CLICK),并且它适用于除网页和键盘之外的所有其他视图。它至少表明 performAction(CLICK) 在网页上不起作用。 ?
  • 是的,这可能是一个合理的测试,但“performAction(CLICK)”在网络上不起作用的笼统说法是错误的,我只是在我的手机上通过 Google.com 上的 TalkBack 这样做。开始了搜索。正如我在回答中所说,这取决于网站如何实现它的事件处理程序。不幸的是,在当前的无障碍 API 中,没有办法可靠地触发 Web 开发人员可以用来处理 AccessibilityService 中的点击的所有潜在事件
  • 对。此限制是否记录在某处?我想说服我的客户。另外,我们不能以编程方式模拟对讲的双击(无需用户触摸屏幕),对吧?这有记录吗?
【解决方案2】:

我猜你可以做这样的事情?

Button button = (Button)findViewById(R.id.ButtonId);
button.onClick(.....); 

【讨论】:

  • 我的应用程序包含一个光标,当我点击它执行点击的任何图标时,它会使用自己的服务运行,如果我不在我的应用程序中并操作其他包含 webview 的应用程序,则 performAction 不起作用。跨度>
  • 在 AccessibilityService 中!此代码有效的可能性为零。 AccessibilityServices 无权访问应用程序视图,只能访问基于可访问性的视图表示。
猜你喜欢
  • 1970-01-01
  • 2021-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-19
  • 1970-01-01
相关资源
最近更新 更多