TextToSpeech setLanguage no funciona?

Estoy configurando mi TextToSpeech para utilizar un idioma en particular (inglés – Reino Unido), utilizando la configuración regional "en_GB". Pero siempre utiliza el idioma predeterminado de mis dispositivos. ¿No hay forma de establecerla mediante programación? He descargado los archivos necesarios para el idioma y cuando cambio el idioma predeterminado de mi TTS a 'English – UK' funciona, pero cuando el valor predeterminado es diferente, el enfoque programático no funciona. He explorado la web a mi mejor pero soy incapaz de resolver este problema.

String ttsEngine = "com.google.android.tts"; txt2Speech = new TextToSpeech(this, this, ttsEngine); //Locale ttsLocale = new Locale("eng", "GBR"); txt2Speech.setLanguage(new Locale("en_GB")); 

Probado varios métodos, pero ninguno está funcionando. ¿No puedo establecer el idioma de mi TTS mediante programación?

Gracias

EDIT: En respuesta a 'A Bustard de miel'

Otro Código:

 public class MainActivity extends AppCompatActivity implements TextToSpeech.OnInitListener 

Mi onInit()

 public void onInit(int status) { // TODO Auto-generated method stub } 

También estoy llamando .setLanguage() en mi onCreate() , tan pronto como mi TextToSpeech se inicializa. ¿Es eso correcto? También sólo lo llamo una vez. No es necesario que lo llame cada vez, ¿no? También estoy probando en un GS7

Debe configurar el idioma una vez que el motor de conversión de texto a voz se haya inicializado correctamente.

 public void onInit(int status) { switch (status) { case SUCCESS: // Set the language here break; case ERROR: // Something went wrong. You can't set the language break; } } 

Deberias hacer eso.

Intente el segundo constructor de la configuración regional que toma dos cadenas como esto:

  txt2Speech.setLanguage(new Locale("en", "GB")); 

EDIT:

Sí, por lo general es bueno hacer instanciar en onCreate, y por lo general sólo necesita y debe hacerse una vez.

Todo lo que puedo hacer es mostrar mi código de trabajo, estoy estableciendo el idioma predeterminado después de instanciar en onCreate ():

  textToSpeech = new TextToSpeech(getApplicationContext(), this); textToSpeech.setLanguage(Locale.getDefault()); 

En mi aplicación hay botones en los que puedes cambiar el idioma, que activan este código (inglés castellano):

  textToSpeech.setLanguage(new Locale("en", "GB")); 

Tal vez no está disponible de alguna manera, hay algunas comprobaciones que puede validar si el idioma y el país está disponible. Usted puede encontrar su error allí.

  if (textToSpeech.isLanguageAvailable(new Locale("en", "GB")) == TextToSpeech.LANG_COUNTRY_AVAILABLE && textToSpeech.isLanguageAvailable(new Locale("en", "GB")) == TextToSpeech.LANG_AVAILABLE) 

Debe devolver true.

  • ¿Cómo puedo controlar cómo Android TTS reproduce audio?
  • TextToSpeech, playEarcon y archivos .wav
  • ¿En qué circunstancias TextToSpeech.isSpeaking () devuelve true?
  • Android "speak fallado: no está vinculado al motor tts"
  • Android: dos instancias de Text-to-Speech funcionan muy lentamente
  • ¿Cómo saber cuándo se termina el TTS?
  • La salida TTS siempre va a A2DP
  • Cómo crear un motor de texto a voz personalizado
  • ¿Cómo comprobar si TtsService (o un servicio de Android) está detenido?
  • UtteranceProgressListener no funciona para Android TTS
  • TextToSpeech.OnInitListener.onInit (int) que se llama continuamente
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.