TextToSpeech.stop()不起作用

时间:2013-07-01 17:49:25

标签: java android text-to-speech

当事件发生时,我在onUteranceComplete()方法中连续调用文本到语音speak()。说话方法工作正常,它不断地说文本,但我在这个代码中面临一个奇怪的问题。当事件结束时,我调用textToSpeech.stop()方法,但是说话方法一直在说话,似乎stop()根本不起作用。我想这个问题正在发生,因为在onUteranceCOmplete()中连续调用speak()。

您的专家认为,这个问题的原因是什么?

        @Override
        public void onInit(int status) {

            if(status != TextToSpeech.ERROR)
            {
                Toast.makeText(getApplicationContext(), "text to speech created", Toast.LENGTH_SHORT).show();
                tts.setLanguage(Locale.US);
                tts.setPitch(1.2f);
                tts.setSpeechRate(1.0f);

                tts.setOnUtteranceCompletedListener(new OnUtteranceCompletedListener() {

                    @Override
                    public void onUtteranceCompleted(String arg0) {
                        // TODO Auto-generated method stub

                        tts.speak("hello world", TextToSpeech.QUEUE_FLUSH, hash);

                    }
                });
            }

    @Override
    public void onCallStateChanged(int state, final String incomingNumber) {
        super.onCallStateChanged(state, incomingNumber);
       ....
       x = tts.speak("hello world", TextToSpeech.QUEUE_FLUSH, hash);
   }

此致

1 个答案:

答案 0 :(得分:1)

您应该设置一个类成员标志

private boolean mShouldSpeak = true;  

然后检查onUtteranceCompleted

中的标志
tts.setOnUtteranceCompletedListener(new OnUtteranceCompletedListener() {

                @Override
                public void onUtteranceCompleted(String arg0) {
                    // TODO Auto-generated method stub
                    if (mShouldSpeak) 
                    {
                        tts.speak("hello world", TextToSpeech.QUEUE_FLUSH, hash);
                    }

                }
            });

事件结束后,只需设置mShouldSpeak to false