2013-08-28 15 views
5

In meiner app, nenne ich TextToSpeech.getLanguage() auch nach TextToSpeech (bis LogCat nach ~ 800ms) instanziiert wird, doch es manchmal (nicht immer) return null, trotz der Sprach richtig in die TextToSpeech Systemeinstellungen festgelegt:Warum würde TextToSpeech.getLanguage() * manchmal * null zurückgeben?

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

Dies geschieht nur in Jelly Bean (Android 4.1.1). Es passiert nicht in Android 2.2.

Ist dies ein bekannter Android-Fehler? Oder mache ich etwas falsch?

ich instanziiert, BTW, TextToSpeech in meinem app Haupttätigkeit mit:

new TextToSpeech(this, this); 

und beide Instanziierung und den Aufruf von TextToSpeech.getLanguage() ist im selben Thread (also die Reihenfolge der Anrufe wird garantiert) hergestellt.

Antwort

2

Sie müssen getLanguage() in onInit() aufrufen, manchmal dauert es einige Sekunden, bis onInit() aufgerufen wird.

+1

Oder jederzeit nach dem Rückruf zeigt an, dass der TTS-Dienst die Initialisierung beendet hat. – alanv

+0

@alanv du hast absolut recht, er muss ein Flag in onInit() setzen und prüfen, ob dieses Flag wahr ist, bevor getLanguage() aufgerufen wird –

+1

@alanv Ich rufe es tatsächlich zweimal in onInit(): Das erste Mal, es gibt null zurück. Beim zweiten Mal kehrt es zu eng_USA zurück, trotz der Tatsache, dass die Einstellungen klar anzeigen, dass eng_GBR gesetzt ist. Wiederum * manchmal * gibt es bei den ersten und zweiten Aufrufen korrekt den Wert für "eng_GBR" zurück. Sieht wie eine Art Race Condition aus? **Warum passiert dies? Was könnte das möglicherweise erklären? –

1

Ich entdeckte diesen Bug heute auch auf einem Asus TF700T mit Android 4.1.1. Ich habe versucht, das Problem zu lösen, indem ich erneut anrief, wie Eternal Learner in einem Kommentar vorgeschlagen hat, aber es gibt immer noch Null zurück, egal wie oft ich es nenne.

Die einfachste Problemumgehung für mich bestand darin, die aktuelle fehlerhafte TextToSpeech-Instanz aufzugeben und eine neue Instanz zu erstellen. Die zweite Instanz scheint zuverlässig zu funktionieren.

Verwandte Themen