0

我正在开发一个 Android webapp(一个使用 Android Studio 构建的应用程序,主要基于加载远程内容的单个 webview),旨在供视障人士使用。

标准的辅助功能,例如 Android 本身和 Talkback 提供的功能,对我的用例来说完全没用,因为这个应用程序旨在以完全非标准的方式使用,通过使用耳机按钮作为唯一的输入和语音文本作为输出。

该网络应用程序不适合非视障人士使用。为此,我们已经有了一个完全不同的 webapp 版本。但是,我确实希望将语音文本显示在屏幕上,主要用于测试/调试目的。

因此,我不需要也不想利用 Google Talkback,而我的 web 应用程序是使用从 JavaScript 调用的本机 TTS(以及 TTS 事件,例如话语结束、触发 JavaScript 代码)从头开始构建的,当 TalkBack 时已经可以正常工作了被禁用。

但是,我的应用程序将主要在用户确实具有辅助功能和启用 TalkBack 的手机上使用(或者可能是其他辅助功能扩展 - 希望不会,因为辅助功能框架几乎不存在标准化)。所以我需要防止它干扰我自己对 TTS 引擎的调用。

这非常复杂。另外,我需要它与 Android 2.x 到 4.x 兼容。

在较旧的 Android 版本上,问题相对较小,因为 TalkBack 不会将脚本注入到 webview 中,并且 webview 几乎是不透明的,其内容对 Talkback 是“不可见的”。

在较新的版本上,这是一场噩梦。Android 没有提供一种方法来简单地禁用应用程序的辅助功能,这很荒谬。AccessibilityManager.interrupt() 方法似乎不起作用,而且它实际上没有文档记录,所以我很难弄清楚我可以尝试以哪些方式使用它。

似乎没有任何关于注入脚本如何工作以及我如何尝试与它们交互的文档。

为了进一步解决问题,我读到自 4.4.something 以来,以前由 TalkBack 注入的脚本现在被其他东西取代,集成到 Web 引擎中,或类似的东西。因此,即使是我可以为 TalkBack 注入脚本找出的任何 hack,也可能不适用于最新版本。

当我的应用程序运行时,是否有一些解决方法/黑客可以从我的应用程序中完全禁用 TalkBack?有没有办法防止从 TalkBack 注入 javascript 代码(当系统启用脚本注入时)?(显然没有在我的 webview 中完全禁用 javascript,因为我确实使用自己的 javascript)是否至少有一些可用的这些脚本的文档?还是他们的代码?这样我至少可以尝试“愚弄”他们?有没有办法让网络视图的某些部分内容对 TalkBack “不可见”?

或任何其他建议,以便能够让我的应用程序自己调用 TTS,同时避免 Talkback 干扰它们,并在屏幕上呈现文本同时防止 TalkBack 与之交互?

4

1 回答 1

2

我已经使用 TalkBack 和 Android 大约一个月了,并且发现了与您相同的挫败感 - 除了阅读数千行源代码之外几乎没有文档。在 4.4 中,WebView 组件更改为使用 Chromium 引擎,这就是我可以说注入的脚本不完全相同的原因。两者似乎仍在使用 ChromeVox。没有用于禁用 TalkBack 的公共 API,如果您参与处理随之而来的头痛,则可以通过反射来完成。最好的办法是从 JS 端禁用 ChromeVox(假设启用了 Web 可访问性设置,它会在 4.4+ 和较低的 4.x 上自动注入到您的 WebView 中)。

我现在只能在 4.4 上进行测试,但这对我有用:

cvox.ChromeVox.host.activateOrDeactivateChromeVox(false);

https://code.google.com/p/google-axs-chrome/source/browse/trunk/chromevox/chromevox/injected/init_document.js?r=193

于 2014-10-08T21:08:42.103 回答