0

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

标准辅助功能(如由Android本身和Talkback提供的辅助功能)对于我的用例来说完全没有用处,因为此应用旨在以完全不标准的方式使用,只需将耳机按钮用作唯一的输入,并将说出的文字作为输出。

该webapp并不意味着不被视觉障碍者使用。我们已经有了完全不同的webapp版本。但是,我确实希望屏幕上显示口述文本,主要用于测试/调试目的。

因此,我不需要也不想利用Google Talkback,而我的webapp是从头开始使用从JavaScript调用的本地TTS(和TTS事件,比如说话结束,触发JavaScript代码)构建的,已经“话语提示”被禁用时可以正常工作。

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

这是一个复杂的地狱。 另外,我需要它通过4.x与Android 2.x兼容。

在较旧的Android版本中,问题相对较小,因为TalkBack不会将脚本插入到Web视图中,并且Web视图几乎是不透明的,其内容对Talkback“隐形”。

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

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

为了让事情更进一步,我正在阅读,因为4.4.something,以前由TalkBack注入的脚本现在被替换为其他内容,集成到非常web引擎或类似的东西。因此,即使我可以找到针对TalkBack注入脚本的任何破解,也可能无法使用最新版本。

当我的应用程序运行时,是否有一些解决方法/黑客可以从我的应用程序完全禁用TalkBack? 有没有办法阻止从TalkBack注入JavaScript代码(当脚本注入是系统启用时)? (显然,在我的webview中完全禁用javascript,因为我使用自己的javascript) 是否至少有一些可用的脚本文档?或者他们的代码?所以我至少可以试图“愚弄”他们? 有没有一种方法可以让webview内容的某些部分对TalkBack“隐形”?

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

回答

1

我一直在使用TalkBack和Android大约一个月的时间,并找到同样的挫折感 - 除了阅读数千行源代码外,几乎没有任何文档。在4.4中,WebView组件更改为使用Chromium引擎,这是我可以告诉脚本注入的原因不完全相同的原因。两者似乎都在使用ChromeVox。没有用于禁用话语提示的公共API,如果您将其包含在内以处理随之而来的头痛问题,则可以通过反射来完成。最好的办法是从JS端禁用ChromeVox(它将自动在4.4及更低的4.x版本中注入到WebView中,假设启用了Web可访问性设置)。

我只能对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

+0

OMG我没有当场activateOrDeactivateChromeVox方法!我设法通过一个相当复杂的JS黑客来禁用ChromeVox(4.1或者其他)。尽管如此,仍然存在着“原生”(它在我被低估的烦恼中的影响)。有一天我会调查你关于思考的建议。现在,我已经放弃了,并且我正在将本应用程序重写为一种可在屏幕关闭/锁定时使用的服务。可访问性API的问题不仅在于它缺少文档,而且完全缺乏对禁用它或调整其行为的任何方式的支持。 – matteo 2014-10-10 12:56:05