2013-08-28 2 views
5

В моем приложении, я называю TextToSpeech.getLanguage() хорошо после инстанцировании TextToSpeech (~ 800ms согласно LogCat), но это иногда (не всегда) возвращение нулевой, несмотря на язык, установленный должным образом в настройках TextToSpeech системы:Почему TextToSpeech.getLanguage() * иногда * возвращает null?

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

Это происходит только в Jelly Bean (Android 4.1.1). Это не происходит в Android 2.2.

Является ли это известной ошибкой Android? Или я делаю что-то неправильно?

Я инстанцирует, кстати, TextToSpeech в основной деятельности моего приложения с:

new TextToSpeech(this, this); 

и оба экземпляра и вызова TextToSpeech.getLanguage() выполнены в том же потоке (при этом порядок вызовов гарантируется).

ответ

2

Вы должны вызвать getLanguage() в onInit(), иногда для вызова onInit() требуется несколько секунд.

+1

Или в любое время после обратного вызова указывает, что служба TTS завершила инициализацию. – alanv

+0

@alanv вы абсолютно правы, ему нужно установить флаг в true в onInit() и проверить, является ли этот флаг истинным до вызова getLanguage() –

+1

@alanv Я на самом деле вызываю его дважды в onInit(): в первый раз это возвращает null. Во второй раз он возвращает eng_USA, несмотря на то, что настройки показывают, что установлен параметр eng_GBR. Опять же, иногда * он правильно возвращает eng_GBR в первом и втором звонках. Похоже, какое-то состояние гонки? **Почему это происходит? Что может это объяснить? –

1

Я также обнаружил эту ошибку сегодня на Asus TF700T под управлением Android 4.1.1. Я попытался решить проблему, снова позвонив getLanguage(), как предложил Eternal Learner в комментарии, но он все равно возвращает null, независимо от того, сколько раз я его называю.

Простейшим обходным решением для меня было отказаться от текущего сломанного экземпляра TextToSpeech и создать новый экземпляр. Второй экземпляр, похоже, работает надежно.