2017-10-18 2 views
0

Android TextToSpeech에서 어떻게 연설이 완료되었는지 알 수 있습니다. 연설이 끝난 후 아이콘을 변경하고 싶습니다. Button Onclick Listener에서 tts.speak()을 선언했습니다. 나는 스레드 postdelayed 처리기를 사용하여 잠시 후 아이콘을 변경합니다. 그러나 읽는 텍스트는 다른 시간에 다른 변화를 보입니다. 그것은 효과가 없습니다. CheckThemestart(), ChangeThemeStop()은 아이콘을 변경하는 함수입니다.TextToSpeech API

  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를 :

내가는에서 OnCreate()에서 다음과 같은 선언 TTS 시작 및 종료 시간과 오류 처리에 대한

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.setOnUtteranceCompletedListener (새 TextToSpeech.OnUtteranceCompletedListener() { \t \t \t \t \t \t \t @Override \t \t \t \t \t \t \t 공개 :하지만 밖으로 일을 didnt한다, 나는 아래 다음 tts.speak에()를 선언 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

. 다음은 코드 스 니펫입니다.

    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을 등록 할 수 있습니다. 우리는 고유 한 문자열 ID로 hasmap 매개 변수를 선언하고 당신이 onUtterenceCompletedListener 내부에 선언 무엇()을 실행 일치하는 경우 utterence ID를 비교하는 ID를 전달하면

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()를 시도했다. 저것은 너무 일하지 않았다. –

관련 문제