Не удалось обнаружить завершение работы TTS (callback) android.

Я разрабатываю приложение для Android, в котором я использую преобразование текста в речь. Что мне нужно, когда я открываю приложение для преобразования текста в речь. После завершения этого я хочу что-то сделать. Мой код выглядит

public class Mainactivity extends Activity implements OnInitListener, OnUtteranceCompletedListener{ private static int REQ_CODE = 1; private TextToSpeech tts = null; private boolean ttsIsInit = false; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); startTextToSpeech(); } private void startTextToSpeech() { Intent intent = new Intent(Engine.ACTION_CHECK_TTS_DATA); startActivityForResult(intent, REQ_CODE); } protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQ_CODE) { if (resultCode == Engine.CHECK_VOICE_DATA_PASS) { tts = new TextToSpeech(this, this); } else { Intent installVoice = new Intent(Engine.ACTION_INSTALL_TTS_DATA); startActivity(installVoice); } } } public void onInit(int status) { if (status == TextToSpeech.SUCCESS) { ttsIsInit = true; int result = tts.setOnUtteranceCompletedListener(this); if (tts.isLanguageAvailable(Locale.ENGLISH) >= 0) tts.setLanguage(Locale.ENGLISH); tts.setPitch(5.0f); tts.setSpeechRate(1.0f); HashMap<String, String> myHashAlarm = new HashMap<String, String>(); myHashAlarm.put(TextToSpeech.Engine.KEY_PARAM_STREAM, String.valueOf(AudioManager.STREAM_ALARM)); myHashAlarm.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, "SOME MESSAGE"); tts.speak("hi how are you?", TextToSpeech.QUEUE_FLUSH, myHashAlarm); } } @Override public void onDestroy() { if (tts != null) { tts.stop(); tts.shutdown(); } super.onDestroy(); } @Override public void onUtteranceCompleted(String uttId) { Toast.makeText(Mainactivity.this,"done", Toast.LENGTH_LONG).show(); if (uttId.equalsIgnoreCase("done")) { Toast.makeText(Mainactivity.this,"inside done", Toast.LENGTH_LONG).show(); } } } 

Когда я открываю текст приложения для работы с тобой. Но как определить, закончен ли текст в речь или нет. Нужна помощь ….. Спасибо …..

Solutions Collecting From Web of "Не удалось обнаружить завершение работы TTS (callback) android."

Если вы используете API-уровень 15 или более поздней TextToSpeech вы можете установить прослушиватель прогресса в своей TextToSpeech ссылке TextToSpeech используя

 setOnUtteranceProgressListener(UtteranceProgressListener listener) 

Вы получите обратные вызовы, сообщающие о ходе работы TTS, включая обратный вызов, когда он будет завершен. См. http://developer.android.com/reference/android/speech/tts/TextToSpeech.html и http://developer.android.com/reference/android/speech/tts/UtteranceProgressListener.html.

Однако я заметил, что вы уже используете устаревший OnUtteranceCompletedListener . onUtteranceCompleted() ли вы обратные вызовы onUtteranceCompleted() ? Это также должно работать.

Вызовите setOnUtteranceCompletedListener внутри функции onInit объекта tts.

Если вы хотите внести какие-либо изменения в пользовательский интерфейс при вызове функции onUtteranceCompleted, добавьте код внутри метода runOnUIThread.

И не забудьте добавить значение параметра Hashmap при вызове функции speak ()

Пример :

 TextToSpeech tts= new TextToSpeech(context, new OnInitListener() { @Override public void onInit(int status) { mTts.setOnUtteranceCompletedListener(new OnUtteranceCompletedListener() { @Override public void onUtteranceCompleted(String utteranceId) { runOnUiThread(new Runnable() { @Override public void run() { //UI changes } }); } }); } }); HashMap<String, String> params = new HashMap<String, String>(); params.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID,"stringId"); tts.speak("Text to Speak",TextToSpeech.QUEUE_FLUSH, params); 

Вот здесь какой-то код, который поможет вам быть обратно совместимыми, поэтому вам не нужно настраивать 15.

 private void setTtsListener() { final SpeechRecognizingAndSpeakingActivity callWithResult = this; if (Build.VERSION.SDK_INT >= 15) { int listenerResult = tts.setOnUtteranceProgressListener(new UtteranceProgressListener() { @Override public void onDone(String utteranceId) { callWithResult.onDone(utteranceId); } @Override public void onError(String utteranceId) { callWithResult.onError(utteranceId); } @Override public void onStart(String utteranceId) { callWithResult.onStart(utteranceId); } }); if (listenerResult != TextToSpeech.SUCCESS) { Log.e(TAG, "failed to add utterance progress listener"); } } else { int listenerResult = tts.setOnUtteranceCompletedListener(new OnUtteranceCompletedListener() { @Override public void onUtteranceCompleted(String utteranceId) { callWithResult.onDone(utteranceId); } }); if (listenerResult != TextToSpeech.SUCCESS) { Log.e(TAG, "failed to add utterance completed listener"); } } }