2012-02-28 18 views
5

Po zarządzający aby TextToSpeech.setEngineByPackageName() działa dzięki this answer, jestem teraz o „odwrotny” problem:TextToSpeech.setEngineByPackageName() zwraca sukces, nawet jeśli pakiet nie jest dostępny

tts.setEngineByPackageName("com.ivona.tts.voicebeta.eng.usa.kendra"); zawsze zwraca TextToSpeech. SUCCESS, nawet jeśli ten pakiet nie jest w ogóle zainstalowany w urządzeniu.

Ponieważ pakiet nie jest dostępny na urządzeniu, TTS kontynuuje rozmowę z domyślnym pico systemu Android, co jest oczekiwane, ale nie rozumiem, dlaczego setEngineByPackageName() zwraca SUCCESS.

Jak to możliwe?

Odpowiedz

4

Z korzyścią dla wszystkich, jestem delegowania odpowiedź dostarczoną przez @Nikolay Elenkov na innej (ale powiązanych) Pytanie:

Wywołanie setEngineByPackageName(), gdy pakiet nie istnieje, nie jest dobrym pomysłem. Zamiast tego należy sprawdzić, czy jest on zainstalowany i nie starają się go używać, jeśli nie jest zainstalowany:

boolean isPackageInstalled(String packageName) { 
    PackageManager pm = context.getPackageManager(); 
    try { 
    PackageInfo pi = pm.getPackageInfo(packageName, 0); 

    return pi != null; 
    } catch (NameNotFoundException e) { 
    return false; 
    } 
} 

Dobrym przykładem, jak to zrobić można zobaczyć pod adresem:

http://code.google.com/p/wwwjdic/source/browse/branches/2.0/wwwjdic/src/org/nick/wwwjdic/TtsManager.java

Powiązane problemy