2017-06-18 45 views
8

我正在使用Android的TextToSpeech類。一切正常。但是,有些語言/區域設置默認不安裝,但由TTS引擎支持,我無法捕獲缺少語音數據的狀態。Android TTS檢查支持的語言環境是否丟失/未下載語音數據

隨着互聯網的發展,當我嘗試將語言設置爲語音數據尚未下載的新語言環境時,它將簡單地下載語音數據並正常/成功執行說話方法。

但是,在關閉互聯網的情況下,當我嘗試將語言設置爲其語音數據尚未下載的新語言環境時,它會嘗試下載語音數據。但沒有互聯網,它只是表示在所選語言環境的「語言和輸入」下的「TTS語音數據」設置屏幕上「下載」,沒有任何進展。正如預期的那樣,由於沒有下載語音數據,所以說方法不起作用。當發生這種情況時,我會認爲TTS方法setLanguage/isLanguageAvailable會返回LANG_MISSING_DATA來捕獲這個狀態,但是,它只是返回LANG_COUNTRY_AVAILABLE。情況如下圖所示:enter image description here

我希望能夠檢測到所選語言環境的語音數據何時未下載/丟失,並提供Toast消息或直接用戶下載它。我已經看到幾個帖子建議使用isLanguageAvailable像這樣使用one。我還查看了android documentation,看起來isLanguageAvailable的返回值應該用LANG_MISSING_DATA捕獲缺少語音數據的狀態。

我也嘗試發送ACTION_CHECK_TTS_DATA意圖作爲另一種檢查缺失數據的方式,正如我鏈接的Android文檔中所建議的那樣。但是,resultCode再次未捕獲/指示語音數據丟失(CHECK_VOICE_DATA_FAIL),而是返回了CHECK_VOICE_DATA_PASS。

在這種情況下,我應該如何捕獲可用/支持的語言/區域的狀態,並且缺少語音數據?我也很好奇爲什麼CHECK_VOICE_DATA_PASS和LANG_MISSING_DATA不是返回的值。當語音數據丟失時,不應該返回這些值嗎?謝謝! 以下是我嘗試在未下載語音數據的語言環境上使用setLanguage和isLanguageAvailable時的返回值(0和1是日誌中顯示的方法的返回值,-1是缺少對應的語言語音數據):enter image description here

回答

5

您可以使用以下功能找到設備的所有可用區域設置。希望這段代碼能幫助你。

Locale loc = new Locale("en"); 
Locale[] availableLocales= loc.getAvailableLocales(); 
Boolean available=Boolean.FALSE; 
for (int i=0;i<availableLocales.length;i++) 
{ 
    if(availableLocales[i].getDisplayLanguage().equals("your_locale_language")) 
    { 
     available=Boolean.TRUE; 
     // TODO: 
    } 
} 
+0

謝謝您的輸入!但是,那不是我想要的。您甚至可以使用TTS實例更有效地獲取引擎支持的所有受支持和可用的語言。無論如何,感謝您的意見! –

0

它看起來像一個漫長的等待問題,但無論如何。看來,你必須檢查語音功能找出它:

Set<String> features = voice.getFeatures(); 
if (features.contains(TextToSpeech.Engine.KEY_FEATURE_NOT_INSTALLED)) { 
//Voice data needs to be downloaded 
... 
}