2012-02-28 19 views
5

Después de gestión para hacer TextToSpeech.setEngineByPackageName() funciona gracias a this answer, ahora estoy teniendo el "opuesto" problema:TextToSpeech.setEngineByPackageName() devuelve el éxito incluso cuando el paquete no está disponible

tts.setEngineByPackageName("com.ivona.tts.voicebeta.eng.usa.kendra"); siempre devuelve de síntesis de voz. SUCCESS, incluso si ese paquete no está instalado en absoluto en el dispositivo.

Dado que el paquete no está disponible en el dispositivo, TTS procede a hablar con el predeterminado de Android pico, que se espera, pero no entiendo por qué setEngineByPackageName() devuelve SUCCESS.

¿Cómo podría ser esto?

Respuesta

4

Para el beneficio de todos, estoy publicando la respuesta proporcionada por @Nikolay Elenkov en una pregunta diferente (pero relacionadas):

Calling setEngineByPackageName() cuando no existe el paquete no es una buena idea. En su lugar, comprobar si está instalado y no trate de usarlo si no está instalado:

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

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

Un buen ejemplo de cómo se hace esto se puede ver en:

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

Cuestiones relacionadas