2013-08-28 26 views
5

は、私にはよくテキスト読み上げ(LogCatに応じて〜800ms)をインスタンス化した後、TextToSpeech.getLanguage()を呼び出して、まだそれ時々(常にではない)、リターンヌル、システムのテキスト読み上げ設定で正しく設定されている言語にもかかわらず:なぜ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のバグですか? または何か間違っていますか?私はインスタンス化

は、ところで、と私のアプリの主な活動でテキスト読み上げ:

new TextToSpeech(this, this); 

とインスタンスとTextToSpeech.getLanguage()への呼び出しの両方が同じスレッド(したがって、呼び出しの順序が保証されている)で作られています。

答えて

2

onInit()でgetLanguage()を呼び出す必要があります。また、onInit()が呼び出されるまでに数秒かかることがあります。

+1

コールバック後、TTSサービスの初期化が完了したことを示します。 – alanv

+0

@alanvあなたは絶対に正しいです、onInit()でフラグをtrueに設定し、getLanguage()を呼び出す前にこのフラグがtrueであるかどうかを確認する必要があります –

+1

@alanv私は実際にonInit()で2回呼び出します。 nullを返します。 2回目はEN_USAを返すが、明らかにeng_GBRが設定されていることが示されているにもかかわらず。繰り返しますが、*時には、1回目と2回目の呼び出しでeng_GBRが正しく返されます。競合状態のように見える? **なぜこうなった?おそらくこれを説明できるのでしょうか? –

1

今日、この4.13.1を実行しているAsus TF700Tでもこのバグを発見しました。私はコメントで提案されたEternal Learnerとしてもう一度getLanguage()を呼び出すことで問題を解決しようとしましたが、何度も何度もnullを返します。

私にとって最も簡単な回避策は、TextToSpeechの現在の壊れたインスタンスを放棄し、新しいインスタンスを作成することでした。 2番目のインスタンスは確実に動作するようです。

関連する問題