说话失败不绑定到TTS引擎

所以我有一个原来的活动,具有基本相同的发言代码,但我不得不将该代码移动到另一个活动。 唯一的区别是我可以告诉的是,文本到语音不是用asynchronous方法调用的。 讲话发生在speakFull方法中。 我得到这些错误:

speak failed: not bound to TTS engine isSpeaking failed: not bound to TTS engine 

我是新来的android开发,我已经通过其他解决scheme来寻找这个问题,我似乎无法find一个解决scheme,使我的工作。 任何意见,或帮助表示赞赏。

码:

  package com.example.webview; import android.os.Bundle; import android.app.Activity; import android.content.Context; import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; import android.content.Intent; import android.speech.tts.TextToSpeech; import android.text.method.ScrollingMovementMethod; import android.view.Menu; import android.view.View; import android.widget.Button; import android.widget.TextView; public class ReadOut extends Activity implements TextToSpeech.OnInitListener, OnClickListener { boolean paused = false; String leftToRead = null; String res = null; @SuppressWarnings("deprecation") @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.read_out); Intent intent = getIntent(); res = intent.getExtras().getString("response"); TextView textv = (TextView) findViewById(R.id.textView1); textv.setText(res); textv.setMovementMethod(new ScrollingMovementMethod()); android.view.Display display = ((android.view.WindowManager)getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); textv.setHeight((int)(display.getHeight()*0.76)); leftToRead = speakFull(res); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. return true; } public String speakFull(String text){ System.out.println("Speaking: " + text); TextToSpeech tts = new TextToSpeech(this, this); System.out.println("Speaking"); String[] sentences = text.split("\n|\\.(?!\\d)|(?<!\\d)\\."); // Regex that splits the body of text into the sentences of that body which are stored in a String array. for(int i = 0; i < sentences.length; i++){ if(!tts.isSpeaking() && !paused){ System.out.println("Speaking: " + i); tts.speak(sentences[i], TextToSpeech.QUEUE_FLUSH, null); }else if(paused){ System.out.println("Paused"); String paused = ""; for(int j = i - 1; j < sentences.length; j++){ paused += sentences[j]; } return paused; }else{ i--; } if(i == sentences.length - 1){ return "Message 001: Complete"; } } return null; } @Override public void onInit(int arg0) { // TODO Auto-generated method stub } public void clickPause(View v){ if(paused){ paused = false; Button b = (Button) findViewById(R.id.button1); b.setText("Play"); }else{ paused = true; Button b = (Button) findViewById(R.id.button1); b.setText("Pause"); if(leftToRead == null){ leftToRead = speakFull(res); }else{ leftToRead = speakFull(leftToRead); } } } @Override public void onClick(DialogInterface arg0, int arg1) { // TODO Auto-generated method stub } } 

Solutions Collecting From Web of "说话失败不绑定到TTS引擎"

在调用onInit()之后,只能调用speak() 。 所以把你的tts在onCreate中的代码讲给onInit()

 @Override public void onInit(int status) { if (status == TextToSpeech.SUCCESS) { leftToRead = speakFull(res); } 

并将暂停初始化为true boolean paused = true;