big*_*ima 2 android text-to-speech speech-to-text
在文本到语音结束后,我怎样才能干杯说话.实际上我想做的不仅仅是Log.这是我的代码.
public class MainActivity extends AppCompatActivity implements TextToSpeech.OnInitListener, TextToSpeech.OnUtteranceCompletedListener {
private TextToSpeech mTts;
Button btnSpeak;
EditText editTextTTS;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTts = new TextToSpeech(this,this);
editTextTTS =(EditText)findViewById(R.id.editText);
btnSpeak = (Button)findViewById(R.id.btnSpeakTest);
btnSpeak.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
speak(editTextTTS.getText().toString());
}
});
}
private void speak(String word){
if(word != null) {
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, "Hello");
mTts.speak(word, TextToSpeech.QUEUE_FLUSH, myHashAlarm);
}
}
@Override
public void onInit(int status) {
if(status == TextToSpeech.SUCCESS) {
mTts.setOnUtteranceCompletedListener(this);
}
}
@Override
public void onUtteranceCompleted(String utteranceId) {
Log.i("CALLBACK", utteranceId); //utteranceId == "SOME MESSAGE"
Toast.makeText(getApplicationContext(),"Call Back",Toast.LENGTH_LONG).show();// I Cannot Toast here. Or do something more than Log
}
Run Code Online (Sandbox Code Playgroud)
实际上,我希望在文本到语音结束之后将语音称为文本.如何在这种方法中做点什么.
03-14 14:35:16.652 5473-5489/com.example.thummawit.testttscallback I/CALLBACK:Hello 03-14 14:35:16.667 5473-5489/com.example.thummawit.testttscallback W/Binder:捕获到RuntimeException来自binder stub实现.java.lang.RuntimeException:无法在android.os.Handler的android.os.Handler.(Handler.java:200)中调用未调用Looper.prepare()的线程内的处理程序.(Handler.java:114)在android.widget.Toast $ TN.(Toast.java:459)的android.widget.Toast.(Toast.java:120)在android.widget.Toast.makeText(Toast.java:289)的com.example. android.speech.tts.TextToSpeech上的android.speech.tts.UtteranceProgressListener $ 1.onDone(UtteranceProgressListener.java:73)中的thummawit.testttscallback.MainActivity.onUtteranceCompleted(MainActivity.java:59)$ Connection $ 1.onSuccess(TextToSpeech.java: 2158)在android.os.Binder.execTransact(Binder.java:446)的android.speech.tts.ITextToSpeechCallback $ Stub.onTransact(ITextToSpeechCallback.java:63)
您尝试Toast在不是UI(主)线程的线程中显示a .你应该改变这个
@Override
public void onUtteranceCompleted(String utteranceId) {
Log.i("CALLBACK", utteranceId); //utteranceId == "SOME MESSAGE"
Toast.makeText(getApplicationContext(),"Call Back",Toast.LENGTH_LONG).show();// I Cannot Toast here. Or do something more than Log
}
Run Code Online (Sandbox Code Playgroud)
进入这个
@Override
public void onUtteranceCompleted(String utteranceId) {
Log.i("CALLBACK", utteranceId); //utteranceId == "SOME MESSAGE"
runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(getApplicationContext(),"Call Back",Toast.LENGTH_LONG).show();
}
});
}
Run Code Online (Sandbox Code Playgroud)
这样,您的代码将被分派到允许您显示Toasts 的主线程
| 归档时间: |
|
| 查看次数: |
2169 次 |
| 最近记录: |