无障碍服务和Webview?

4

是否可以通过辅助功能服务点击放置在Webview内部的特定按钮?例如,某个应用程序A在MainActivity中有一个WebView。启动活动后,Web内容将在Webview中加载。加载的网页包含文本为“Chat”的按钮。我能用辅助功能服务点击这个按钮吗?我知道我可以在Android本机小部件(android.widget.Button,TextView等)上执行单击操作,但我不知道如何在Web视图中显示的按钮上执行单击操作。请帮忙。


你可以通过覆盖点击该按钮后获取的URL来实现这一点,在该方法中,你可以做任何你想做的事情。 - Akash Dubey
我的应用程序包含一个光标,当我点击任何图标时,它会运行自己的服务。如果我不在我的应用程序中并操作其他包含Webview的应用程序,则performAction无法正常工作。 - Rohit Sharma
@AkashDubey,我认为Rohit想要在没有用户触摸屏幕的情况下点击。同时,这需要一个后端服务。他如何使用屏幕坐标来获取链接的焦点,而不用触摸屏幕呢? - M. Usman Khan
1个回答

1

这是一个比较复杂的答案。是的,你可以点击视图,但是这取决于网页开发人员如何实现按钮。如果他们像实现触摸按下和抬起监听器那样做了一些愚蠢的事情,而不是onClick监听器,那么它可能会出现问题。建议:使用TalkBack。如果它不能与TalkBack配合使用,则无法完成操作。如果可以,以下代码应适用于您:

AccessibilityNodeInfo info = ...;

info.performAction(AccessibilityNodeInfo.ACTION_CLICK);

注:有传言称Android正在实现从辅助功能服务中伪造真实硬件事件的能力。到目前为止,我只看到这在Android的演示中被用于系统应用程序(具有提升的权限)。请注意寻找需要完善此功能的API,它们可能确实隐藏在某个地方,但我还没有看到它们公开。


在Talkback中,如果我们启用“单击”,那么对于网页(在链接被前面的单击聚焦后),单击将不起作用。这表明performAction(CLICK)对于网页无效。双击可以使用链接,但我猜测双击是在内部处理的,我们无法访问。 - M. Usman Khan
Single-Tap 是实验性的,我不会将其用作任何指标。 - MobA11y
是的,但在单击时它会执行performAction(CLICK),并且对于除Web页面和键盘之外的所有其他视图都有效。至少可以显示performAction(CLICK)无法在Web页面上工作。 - M. Usman Khan
1
是的,这可能是一个合理的测试,但“performAction(CLICK)”在网页上不起作用的总结是错误的,我刚刚在我的手机上通过TalkBack在Google.com上实现了它。开始了一次搜索。正如我在答案中所说的那样,这取决于网站如何实现它的事件处理程序。不幸的是,在当前无障碍API中,没有可靠的方法可以从AccessibilityService内部触发Web开发人员可以使用来处理点击的所有潜在事件。 - MobA11y
好的。这个限制有文档记录吗?我想说服我的客户。 另外,我们无法通过编程模拟Talkback的双击操作(不需要用户触摸屏幕),对吗?这个有文档记录吗? - M. Usman Khan
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接