2017-10-18 173 views
0

在Android TextToSpeech中,我们怎么知道Speech是否完成。演讲结束后我想改变图标。我在Button Onclick Listener中声明了tts.speak()。我使用线程postdelayed处理程序一段时间后更改图标。但是要阅读的文本在不同的时间会有所不同。它没有解决。 CheckThemestart(),ChangeThemeStop()是改变图标的​​函数。TextToSpeech API

我宣布的OnCreate()以下:

  tts = new TextToSpeech(getContext(), new 
         TextToSpeech.OnInitListener() { 
      @Override 
      public void onInit(int status) { 
      if (status != TextToSpeech.ERROR) { 
       tts.setLanguage(Locale.UK); 
      tts.speak("",TextToSpeech.QUEUE_FLUSH,null); 
      } 

扣onClickListener:

if (!tts.isSpeaking()) { 
        CheckThemeStart(); 
        tts.speak(plainText, TextToSpeech.QUEUE_FLUSH, null); 

        new Handler().postDelayed(new Runnable() { 
         @Override 
         public void run() { 
          //change icon after spoken 
          CheckThemeStop(); 

         } 
        }, 15000); 

       } else { 
        CheckThemeStop(); 
        tts.stop(); 
       } 
+0

你尝试setOnUtteranceProgressListener? –

+0

[如何知道什么时候TTS完成?](https://stackoverflow.com/questions/4658376/how-to-know-when-tts-is-finished) –

+0

我试着用setOnUtterenceProgressListener。但它没有制定出来,我声明了以下旁tts.speak(): tts.setOnUtteranceCompletedListener(新 TextToSpeech.OnUtteranceCompletedListener(){ \t \t \t \t \t \t \t @覆盖 \t \t \t \t \t \t \t公众void onUtteranceCompleted(String utteranceId){ \t \t \t \t \t \t \t \t CheckThemeStop(); \t \t \t \t \t \t \t} \t \t \t \t \t \t}) –

回答

1

如果我们声明具有唯一的字符串ID的hasmap参数,并通过该ID匹配,如果它执行你的内心onUtterenceCompletedListener声明一下()比较utterence ID。 以下是代码片段。

    HashMap<String,String> params=new HashMap<String, String>(); 
        params.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID,"SpeakID"); 
        tts.speak(plainText, TextToSpeech.QUEUE_FLUSH,params); 
        tts.setOnUtteranceCompletedListener(new TextToSpeech.OnUtteranceCompletedListener() { 
         @Override 
         public void onUtteranceCompleted(String utteranceId) { 
          if(utteranceId.equals("SpeakID")) 
          { 
            CheckThemeStop(); 
          } 
         } 
        }); 
1

您可以注册为UtteranceProgressListener TTS开始和结束时间和错误处理。

tts.setOnUtteranceProgressListener(new UtteranceProgressListener() { 
     @Override 
     public void onStart(String s) { 

     } 

     @Override 
     public void onDone(String s) { 

     } 

     @Override 
     public void onError(String s) { 

     } 
     }); 
+0

我想这也是由OnDone声明说()的调用onStart()和更改图标()。但他们两个不工作 –

+0

请把日志和调试,并检查他们是否被调用?或者把整个TTS的代码。 –

+0

@ReyanshMishra我检查了调试器。它没有进入onStart(),onDone()。我也尝试了setOnUtterenceCompletedListener()。这也没有奏效。 –