TextToSpeech.setEngineByPackageName () возвращает успех, даже если пакет недоступен - PullRequest
5 голосов
/ 28 февраля 2012

После того, как удалось заставить TextToSpeech.setEngineByPackageName () работать благодаря этому ответу , у меня теперь возникает "противоположная" проблема:

tts.setEngineByPackageName("com.ivona.tts.voicebeta.eng.usa.kendra"); всегда возвращает TextToSpeech.УСПЕХ , даже если этот пакет вообще не установлен на устройстве.

Поскольку пакет недоступен на устройстве, TTS продолжает говорить со стандартным Android pico, что ожидается, ноЯ не понимаю, почему setEngineByPackageName() возвращает УСПЕХ.

Как это может быть?

1 Ответ

4 голосов
/ 01 марта 2012

В интересах всех, я публикую ответ, предоставленный @ Николай Еленков на другой (но связанный) вопрос:

Вызов setEngineByPackageName (), когда пакет не существует, не является хорошей идеей. Вместо этого проверьте, установлен ли он, и не пытайтесь использовать его, если он не установлен :

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

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

Хороший пример того, как это делается, можно увидеть по адресу:

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

...