Intereting Posts
В Android-приложении, когда ресурсы загружаются в память? Android mediaRecorder.setAudioSource не удалось Развернуть элемент ListView с анимацией Разрешения Android M с оповещениями о переносе Layout_span в TableLayout в Android Android Studio поврежден .java-файл после неправильного завершения работы Как найти список приложений, к которым пользователь обращается в Интервал, используя фоновое задание? Android 2.3.3 эмулятор с изображением x86 не будет запускаться с помощью «Использовать хост-GPU», Как отключить диалог «сохранить пароль» в Android WebView? Как можно определить, когда оно привязано к его родительскому объекту? Android: проверьте, пуст ли EditText пуст, когда inputType установлен на Number / Phone Скопировать файл базы данных на SDCard в android К сожалению, системный интерфейс остановлен Что такое «Имя класса Android» для приложения Facebook, написанного на Flex? Android Facebook SDK v4 Проблема с просмотром

TextToSpeech.OnInitListener.onInit (int), вызываемый непрерывно

Я получаю сообщения о том, что некоторые (не все) HTC Desire HD (FRF91, 2.2) и HTC EVO 4G (PC36100 | 3.29.651.5, 2.2), TextToSpeech.OnInitListener.onInit(int) вызывается повторно (более 1500 раз в течение нескольких секунд) на том же объекте. Такое поведение не происходит ни для одного из моих других пользователей (или других пользователей Desire HD) AFAICT.

Код:

 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++; } }); 

Какие-нибудь идеи?

EDIT: Я также попробовал вызывать метод shutdown() (в первый раз обнаружены множественные вызовы прослушивателя), но это, похоже, не помогает.

Solutions Collecting From Web of "TextToSpeech.OnInitListener.onInit (int), вызываемый непрерывно"

Может быть, вам стоит обойти это с помощью собственного метода посредника, например:

 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' } } 

Это может или не поможет, но у меня была аналогичная проблема, когда звонил tts из службы, к счастью для меня мне было лучше делать мои тс от активности, которая решила проблему.

Если вы сделаете это, и это уместно, убедитесь, что ваш манифест для этой деятельности:

 android:finishOnTaskLaunch="true" 

Попробуйте создать объект Textospeech раньше, чтобы создать ie. Глобально. Попробуйте этот код и проверьте, все ли он звонит много раз ????

 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(); } } }