Я использую классы MediaPlayer TextToSpeech.Мне нужно уловить момент, когда разговор окончен.Я использую этот код:
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp)
{
speechRecognizer.startListenig();
//binding.play.performClick();
}
});
TTS.setOnUtteranceProgressListener(new UtteranceProgressListener() {
@Override
public void onDone(String utteranceId) {
speechRecognizer.startListenig();
}
@Override
public void onError(String utteranceId) { }
@Override
public void onStart(String utteranceId) { }
});
Оба слушателя запускают этот метод:
public void startListenig(){
binding.progressSound.setVisibility(View.VISIBLE);
binding.progressSound.setIndeterminate(true);
speech.startListening(recognizerIntent);
}
Слушатель Media Player работает нормально.Слушатель Text To Speech выдает исключение:
android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
Я пытался найти это в Google, но я не понимаю источник моей проблемы, почему в случае с медиаплеером это работает и почему TTS генерирует исключения.
Пожалуйста, дайте мне подсказку, как решить эту проблему.