Estoy desarrollando una aplicación muy simple aquí. Es para mi hija de parálisis cerebral. Es solo un gran SÍ y NO botones, por lo que puede presionarlos cuando lo solicite.Android no reconoce el motor TTS
Bueno ... Estoy usando SVOX Classic TTS Engine.
Todo funcionaba sin problemas hasta que mi tableta se actualizó a ICS. Ahora, cada vez que ejecuto la aplicación, abre el Market pidiéndome que instale TTS. Pulso "volver" y luego, mi aplicación habla. Esto es MUY molesto.
Esto es lo que Google API dice:
* Una prueba con éxito estará marcado por un código de resultado CHECK_VOICE_DATA_PASS, que indica que este dispositivo está listo para hablar, después de la creación de nuestro objeto de síntesis de voz. De lo contrario, debemos informar al usuario de la instalación de los datos necesarios para que el dispositivo se convierta en una máquina parlante multilingüe. La descarga e instalación de los datos se realiza activando ACTION_INSTALL_TTS_DATA, que llevará al usuario a Android Market y le permitirá iniciar la descarga. La instalación de los datos se realizará automáticamente una vez que se complete la descarga. Este es un ejemplo de lo que su implementación de onActivityResult() se vería así: *
Aquí está mi código:
public class yesOunoActivity extends Activity implements OnInitListener{
ImageView yes;
ImageView no;
public TextToSpeech tts;
private int MY_DATA_CHECK_CODE = 0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent checkIntent = new Intent();
checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
startActivityForResult(checkIntent, MY_DATA_CHECK_CODE);
tts = new TextToSpeech(this, this);
setContentView(R.layout.yesorno);
yes = (ImageView) findViewById(R.id.yes);
no = (ImageView) findViewById(R.id.no);
yes.setClickable(true);
yes.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent arg1) {
if (arg1.getAction() == android.view.MotionEvent.ACTION_DOWN) {
tts.speak("yes!", TextToSpeech.QUEUE_ADD, null);
}
return true;
}
});
no.setClickable(true);
no.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent arg1) {
if (arg1.getAction() == android.view.MotionEvent.ACTION_DOWN) {
//Intent myIntent = new Intent(v.getContext(), ParametrosActivity.class);
tts.speak("no!", TextToSpeech.QUEUE_ADD, null);
}
return true;
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == MY_DATA_CHECK_CODE) {
if (resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) {
// success, create the TTS instance
tts = new TextToSpeech(this, this);
} else {
// missing data, install it
//ATTENTION: BELOW THIS GIVES ME PROBLEMS SINCE IT OPENS MARKET
//AND I HAVE TO HIT THE BACK BUTTON, THEN, IT SPEAKS!
//BTW TTS ENGINE "IS" INSTALLED!!
Intent installIntent = new Intent();
installIntent
.setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);
startActivity(installIntent);
}
}
}
@Override
public void onInit(int status) {
if (status == TextToSpeech.SUCCESS) {
} else if (status == TextToSpeech.ERROR) {
}
}
@Override
public void onDestroy() {
if (tts != null) {
tts.stop();
tts.shutdown();
}
super.onDestroy();
System.gc();
}
}
Si quito la zona con "atención" más arriba (ya que estoy seguro de que tengo TTS instalado), funciona la primera vez que ejecuto la aplicación, si dejo la aplicación y la vuelvo a abrir, dice "ha fallado: no está vinculado al motor de tts"
Parece que no crea el objeto TTS ya que la aplicación aún está en la memoria.
Entonces, chicos ... ¿qué piensan ustedes que debería hacer?
Esto me está volviendo loco y realmente necesito comunicarle a mi hija a través de la tableta.
¡Cualquier ayuda es apreciada!
@Carols Pereira - ¿Pudo resolver este problema?un usuario informó que están teniendo el mismo problema al que se enfrentó, pero cuando lo probamos en emulador funcionó bien para nosotros. ¿Pudo identificar la causa raíz de este problema? ¿Fue un error en svox? – aquero