2013-08-28 38 views
5

W mojej aplikacji, wzywam TextToSpeech.getLanguage() dobrze po uruchamianiu TextToSpeech (~ 800ms według LogCat), jednak to czasami (nie zawsze) return null, pomimo języka poprawnie ustawiony w ustawieniach TextToSpeech systemowych:Dlaczego funkcja TextToSpeech.getLanguage() * czasami * zwraca wartość null?

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

To się dzieje tylko w Jelly Bean (Android 4.1.1). Nie dzieje się to w systemie Android 2.2.

Czy jest to znany błąd Androida? Czy robię coś złego?

I instancji, BTW, TextToSpeech w głównej działalności mojej aplikacji z:

new TextToSpeech(this, this); 

i obu instancji i wywołanie TextToSpeech.getLanguage() dokonywane są w tym samym wątku (stąd kolejność połączeń jest gwarantowana).

Odpowiedz

2

Musisz wywołać metodę getLanguage() w funkcji onInit(), czasami wywołanie funkcji onInit() zajmuje kilka sekund.

+1

Lub w dowolnym czasie po wywołaniu zwrotnym oznacza, że ​​usługa TTS zakończyła inicjowanie. – alanv

+0

@alanv masz absolutną rację, musi ustawić flagę na true w onInit() i sprawdź czy ta flaga jest prawdziwa przed wywołaniem getLanguage() –

+1

@alanv Tak naprawdę to dwa razy wywołuję onInit(): Za pierwszym razem zwraca null. Drugi raz zwraca wartość eng_USA, mimo że ustawienia pokazują wyraźnie eng_GBR. Ponownie, * czasami * poprawnie zwraca eng_GBR w pierwszym i drugim wywołaniu. Wygląda na jakiś rodzaj wyścigu? **Dlaczego to się dzieje? Co to może wyjaśnić? –

1

Odkryłem także ten błąd dzisiaj na Asus TF700T z systemem Android 4.1.1. Próbowałem rozwiązać problem ponownie, dzwoniąc pod numer getLanguage(), tak jak zasugerował to Eternal Learner w komentarzu, ale nadal zwraca on wartość null, niezależnie od tego, ile razy go wołam.

Najprostszym rozwiązaniem było porzucenie aktualnie uszkodzonego wystąpienia TextToSpeech i utworzenie nowej instancji. Druga instancja działa niezawodnie.

Powiązane problemy