У меня есть активность Android, которая использует TTS, но когда я выхожу из нее, в Logcat появляется ошибка подключения к службе. Над просочившейся ошибкой службы я получаю утверждение, что:
stop failed: not bound to TTS engine
shutdown failed: not bound to TTS engine
Мои onStop и onDestroy выглядят так: РЕДАКТИРОВАТЬ код:
@Override
public void onStop() {
if (tts != null) {
tts.stop();
}
super.onStop();
}
@Override
public void onDestroy() {
if (tts != null) {
tts.shutdown();
}
super.onDestroy();
}
Я запускаю TTS, когда пользователь нажимает кнопку (TTS работает нормально, я просто пытаюсь исправить ошибку подключения к службе)
if (v == speakButton && ttscrashprotect == 1) {
String text = inputText.getText().toString();
if (text != null && text.length() > 0) {
tts.speak(text, TextToSpeech.QUEUE_ADD, null);
}
Это мой onActivityResult
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == MY_DATA_CHECK_CODE) {
if (resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) {
//sucess with TTS create it
tts = new TextToSpeech(this, this);
}
else {
//missing TTS so install it
Intent installIntent = new Intent();
installIntent.setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);
startActivity(installIntent);
}
}
TTS работает нормально, и я вижу, что движок вызывается в logcat, но по какой-то причине tts.stop()
и tts.shutdown()
не привязаны к одному и тому же движку.
РЕДАКТИРОВАТЬ 2: Кажется, я подключаюсь к движку и сервису TTS более одного раза. Каждый раз, когда текст, который я хочу, чтобы TTS произносил в действии, устанавливается другое соединение с механизмом TTS и службой TTS.
Мой код TTS при изменении текста выглядит так:
if (v==nextButton && progressL1<100) {
Video.setVisibility(View.INVISIBLE); //hide the video view
progressL1= progressL1 + 10;
//increase progress by 10 and then load the new files
//load the TTS text data from Asset folder progressL1 txt file
Advanced.this.loadDataFromAsset(progressL1);
//try some tts stuff here
Intent checkIntent = new Intent();
checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
startActivityForResult(checkIntent, MY_DATA_CHECK_CODE);
TTS запускается кодом v == speakButton
выше.
tts.stop()
иtts.shutdown()
дважды, и вonStop()
, и вonDestroy()
? - person Alexis Pigeon   schedule 21.08.2014