2013-08-28 5 views
5

, ben de TextToSpeech (LogCat göre ~ 800ms) başlatmasını sonra TextToSpeech.getLanguage() diyoruz, henüz bazen (her zaman değil) dönüş null, sistemin TextToSpeech ayarlarında düzgün ayarlanmış dilde rağmen:Neden TextToSpeech.getLanguage() * bazen * boşver? Benim uygulamasında

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

Bu yalnızca Jelly Bean'de (Android 4.1.1) gerçekleşir. Android 2.2'de gerçekleşmez.

Bu bilinen bir Android hatası mı? Yoksa yanlış bir şey mi yapıyorum?

ben örneğini ve ödeyecekleri benim Uygulamanın ana aktivitede TextToSpeech:

new TextToSpeech(this, this); 

Ve her iki oluşturulabilmesi ve TextToSpeech.getLanguage() yapılan çağrı aynı parçacığı (garanti edilir aramaların dolayısıyla sipariş) yapılır.

cevap

2

OnInit() öğesinde getLanguage() öğesini çağırmanız gerekir, bazen çağrılacak onInit() için birkaç saniye gerekir.

+1

Veya geri aramadan sonraki herhangi bir zamanda, TTS hizmetinin başlatmayı tamamladığını gösterir. – alanv

+0

@alanv kesinlikle haklısınız, onInit() 'de doğru olan bir bayrağı ayarlamanız ve getLanguage() –

+1

@ alanv çağırmadan önce bu işaretin true olup olmadığını kontrol etmem gerekiyor. Aslında iki kez onInit(): null değerini döndürür. Ayarların açıkça eng_GBR ayarlanmış olmasına rağmen, ikinci kez eng_USA döndürür. Yine, * bazen * birinci ve ikinci aramalarda eng_GBR'yi doğru şekilde döndürür. Bir çeşit ırk durumuna benziyor mu? **Bu neden oluyor? Bunu ne açıklayabilirdi? –

1

Ayrıca bu hatayı Android 4.1.1 çalıştıran bir Asus TF700T sürümünde de keşfettim. Eternal Learner'ın bir yorumda önerdiği gibi tekrar getLanguage() numaralı telefonu arayarak sorunu çözmeye çalıştım ancak kaç kez çağırsam da yine de null değerini döndürür.

Benim için en kolay çözüm, geçerli TextToSpeech örneğini terk etmek ve yeni bir örnek oluşturmaktı. İkinci örnek güvenilir bir şekilde çalışıyor gibi görünüyor.