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