2013-08-28 127 views
5

在我的應用程序,我稱之爲TextToSpeech.getLanguage()實例文字轉語音(根據logcat的〜800毫秒)後好了,但它有時(並不總是)返回null,儘管在系統的文字轉語音設置正確設置語言:爲什麼TextToSpeech.getLanguage()*有時*會返回null?

System Settings > Language & input > 
    Text-to-speech output > Google Text-to-speech > English (United Kingdom) 

這隻發生在果凍豆(Android 4.1.1)。 在Android 2.2中不會發生。

這是一個已知的Android錯誤? 或者我做錯了什麼?

我實例,順便說一句,文字轉語音在我的應用程式和主要活動:

new TextToSpeech(this, this); 

而且兩者實例化和調用TextToSpeech.getLanguage()都在同一個線程(因此調用的順序是保證)製成。

回答

2

您必須在onInit()中調用getLanguage(),有時需要調用onInit()幾秒鐘。

+1

或回調後任何時間表示TTS服務已完成初始化。 – alanv

+0

@alanv你是絕對正確的,他需要在onInit()中設置一個標誌爲true,並且在調用getLanguage()之前檢查這個標誌是否爲true() –

+1

@alanv我實際上在onInit()中調用它兩次:第一次,它返回null。第二次返回eng_USA,儘管設置顯示eng_GBR已設置。再一次,*有時*它在第一次和第二次調用中確實返回eng_GBR。看起來像某種競爭條件? **爲什麼**發生這種情況?有什麼可以解釋這一點? –

1

我今天在運行Android 4.1.1的華碩TF700T上也發現了這個bug。我試圖通過再次呼籲getLanguage()來解決這個問題,因爲永久學習者在評論中提出了建議,但無論我多次稱它爲何,它仍然返回null。

對我來說最簡單的解決方法是放棄TextToSpeech的當前破碎實例並創建一個新實例。第二種情況似乎可靠。