文字转语音讲完Android后如何敬酒 [英] How can I Toast after Text to Speech finish speaking Android

查看:109
本文介绍了文字转语音讲完Android后如何敬酒的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

从文字到语音结束讲话后,我如何敬酒.实际上,我想做的事情比Log还多.这是我的代码.

How can I Toast after Text to Speech finish speak. Actually I want to do someting more than Log. This is my code.

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
    }

实际上,我想在文字转语音"结束讲话后再将语音转成文字.如何用这种方法做某事.

Actually I want to call speech to text after Text to Speech finish speak. How to do something in this method.

03-14 14:35:16.652 5473-5489/com.example.thummawit.testttscallback I/CALLBACK:您好03/14/14:35:16.667 5473-5489/com.example.thummawit.testttscallback W/Binder:从活页夹存根实现中捕获了RuntimeException.java.lang.RuntimeException:无法在尚未调用Looper.prepare()的线程内创建处理程序在android.os.Handler.(Handler.java:200)在android.os.Handler.(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.thummawit.testttscallback.MainActivity.onUtteranceCompleted(MainActivity.java:59)在android.speech.tts.UtteranceProgressListener $ 1.onDone(UtteranceProgressListener.java:73)在android.speech.tts.TextToSpeech $ Connection $ 1.onSuccess(TextToSpeech.java:2158)在android.speech.tts.ITextToSpeechCallback $ Stub.onTransact(ITextToSpeechCallback.java:63)在android.os.Binder.execTransact(Binder.java:446)

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: Caught a RuntimeException from the binder stub implementation. java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() at android.os.Handler.(Handler.java:200) at android.os.Handler.(Handler.java:114) at android.widget.Toast$TN.(Toast.java:459) at android.widget.Toast.(Toast.java:120) at android.widget.Toast.makeText(Toast.java:289) at com.example.thummawit.testttscallback.MainActivity.onUtteranceCompleted(MainActivity.java:59) at android.speech.tts.UtteranceProgressListener$1.onDone(UtteranceProgressListener.java:73) at android.speech.tts.TextToSpeech$Connection$1.onSuccess(TextToSpeech.java:2158) at android.speech.tts.ITextToSpeechCallback$Stub.onTransact(ITextToSpeechCallback.java:63) at android.os.Binder.execTransact(Binder.java:446)

推荐答案

您尝试在不是UI(main)线程的线程中显示 Toast .你应该改变这个

You try to show a Toast in a thread that is not the UI(main) thread. You should change 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
}

进入此

@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();
        }
    });
}

这样,您的代码将被分派到允许显示 Toast s

That way your code is dispatched to the main thread where you are allowed to show Toasts

这篇关于文字转语音讲完Android后如何敬酒的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆