2013-08-28 20 views
5

Nella mia app, chiamo TextToSpeech.getLanguage() bene dopo un'istanza TextToSpeech (~ 800ms secondo LogCat), eppure volte (non sempre) null ritorno, nonostante la lingua impostata correttamente nelle impostazioni di sintesi vocale del sistema:Perché TextToSpeech.getLanguage() * a volte * restituisce null?

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

Questo succede solo in Jelly Bean (Android 4.1.1). Non succede in Android 2.2.

Si tratta di un bug Android noto? O sto facendo qualcosa di sbagliato?

I istanziare BTW, TextToSpeech in attività principale della mia app con:

new TextToSpeech(this, this); 

Ed entrambi esemplificazione e la chiamata alla TextToSpeech.getLanguage() sono realizzati nello stesso thread (così ordine di chiamate è garantita).

risposta

2

Devi chiamare getLanguage() in onInit(), a volte ci vuole qualche secondo prima che onInit() venga chiamato.

+1

O in qualsiasi momento dopo la richiamata indica che il servizio TTS ha terminato l'inizializzazione. – alanv

+0

@alanv hai assolutamente ragione, ha bisogno di impostare un flag su true in onInit() e controllare se questo flag è true prima di chiamare getLanguage() –

+1

@alanv In realtà lo chiamo due volte in onInit(): la prima volta, restituisce null. La seconda volta restituisce eng_USA, nonostante il fatto che le impostazioni mostrino chiaramente eng_GBR. Di nuovo, * a volte * restituisce eng_GBR correttamente nella prima e nella seconda chiamata. Sembra una specie di condizione di gara? **Perché sta succedendo? Cosa potrebbe spiegare questo? –

1

Ho scoperto questo bug anche oggi su un Asus TF700T con Android 4.1.1. Ho provato a risolvere il problema chiamando di nuovo getLanguage() come suggerito da Eternal Learner in un commento, ma restituisce comunque nulla, non importa quante volte lo chiamo.

La soluzione più semplice per me era abbandonare l'attuale istanza rotta di TextToSpeech e creare una nuova istanza. La seconda istanza sembra funzionare in modo affidabile.

Problemi correlati