TextToSpeech.OnInitListener.onInit (int) que se llama continuamente

Estoy recibiendo informes de que, en algunos (no todos) HTC Desire HD (FRF91, 2.2) y HTC EVO 4G (PC36100 | 3.29.651.5, 2.2), el TextToSpeech.OnInitListener.onInit(int) se llama repetidamente 1500 veces en el espacio de unos segundos) en el mismo objeto. Este comportamiento no ocurre para ninguno de mis otros usuarios (o con otros usuarios de Desire HD) AFAICT.

El código es:

 TextToSpeech tts = new TextToSpeech(context, new TextToSpeech.OnInitListener() { private int mCallCount = 0; // trying to investigate potential infinite loops @Override public void onInit(int status) { if ((mCallCount % 100) == 1) { // report this } mCallCount++; } }); 

Alguien alguna idea?

EDIT: También he intentado llamar al método shutdown() (la primera vez que se detectan múltiples llamadas de escuchas) pero esto no parece ayudar.

Tal vez usted debe obtener alrededor de él con su propio método intermediario, por ejemplo:

 private long lastCall = 0; private long deepBreath = 5*1000; //5 seconds private boolean hasRested; TextToSpeech tts = new TextToSpeech(context, new TextToSpeech.OnInitListener() { @Override public void onInit(int status) { long thisCall = Calendar.getInstance().getTimeInMillis(); intermediaryMethod(status, thisCall); } }); //new method public void intermediaryMethod(int status, long thisCall) { hasRested = (thisCall-lastCall)>=deepBreath; if (hasRested) { lastCall = thisCall; //do something about 'status' } } 

Esto puede o no puede ayudar, pero tuve un problema similar cuando llaman tts de un servicio, por suerte para mí era mejor hacer mi tts de una actividad que resolvió el problema.

Si lo hace, y es apropiado, asegúrese de que el manifiesto para la actividad tenga:

 android:finishOnTaskLaunch="true" 

Trate de crear el objeto de la Textospeech antes de crear, por ejemplo. Globalmente .try este código y comprobar es todavía llamar a muchas veces ????

 public class TtsActivity extends Activity implements OnInitListener { private int MY_DATA_CHECK_CODE = 0; private TextToSpeech tts; private EditText inputText; private Button speakButton; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); inputText = (EditText) findViewById(R.id.input_text); speakButton = (Button) findViewById(R.id.speak_button); speakButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { String text = inputText.getText().toString(); if (text!=null && text.length()>0) { Toast.makeText(TtsActivity.this, "Saying: " + text, Toast.LENGTH_LONG).show(); tts.speak(text, TextToSpeech.QUEUE_ADD, null); } } }); Intent checkIntent = new Intent(); checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA); startActivityForResult(checkIntent, MY_DATA_CHECK_CODE); } 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 Intent installIntent = new Intent(); installIntent.setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA); startActivity(installIntent); } } } @Override public void onInit(int status) { if (status == TextToSpeech.SUCCESS) { Toast.makeText(TtsActivity.this, "Text-To-Speech engine is initialized", Toast.LENGTH_LONG).show(); } else if (status == TextToSpeech.ERROR) { Toast.makeText(TtsActivity.this, "Error occurred while initializing Text-To-Speech engine", Toast.LENGTH_LONG).show(); } } } 
  • Manejo de múltiples idiomas sin demora en el TTS de Android
  • ¿Por qué TextToSpeech.getLanguage () * a veces * devuelve null?
  • Inicializar el objeto TextToSpeech en un subproceso de trabajo
  • ¿Cuál es el flujo de audio predeterminado de TTS?
  • Hablar con TTS como Hindi
  • TextToSpeech setLanguage no funciona?
  • TTS android 4.1 jellybean
  • Android TTS no habla gran cantidad de texto
  • SpeechToText y ejecutando la intención ACTION_CHECK_TTS_DATA
  • La salida TTS siempre va a A2DP
  • Cómo crear un motor de texto a voz personalizado
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.