2017-10-18 2 views
0

In Android TextToSpeech, wie kommt es, dass wir wissen, entweder Sprache ist fertig. Ich möchte das Symbol nach Beendigung der Sprachausgabe ändern. Ich habe tts.speak() im Button Onclick Listener deklariert. Ich benutze Thread postdelayed Handler, um das Symbol nach einiger Zeit zu ändern. aber der zu lesende Text ändert sich zu verschiedenen Zeiten. Es hat nicht funktioniert. CheckThememart(), ChangeThemeStop() sind Funktionen, um das Symbol zu ändern.TextToSpeech API

i erklärte folgendes in 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); 
      } 

Knopf-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

Haben Sie setOnutteranceProgressListener getestet? –

+0

Mögliche Duplikate von [Wie zu wissen, wenn TTS fertig ist?] (Https://stackoverflow.com/questions/4658376/how-to-know-when-tts-is-finished) –

+0

Ich versuchte mit setOnUtterenceProgressListener. aber es hat nicht geklappt, erklärte ich die unten neben tts.speak(): tts.setOnUtteranceCompletedListener (neu TextToSpeech.OnUtteranceCompletedListener() { \t \t \t \t \t \t \t @Override \t \t \t \t \t \t \t Öffentlichkeit nichtig 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}) –

Antwort

1

Wenn wir einen hasmap Parameter mit eindeutiger String ID deklarieren und diese ID passieren zu utterence id zu vergleichen, wenn es passt ausführen, was Sie in onUtterenceCompletedListener() deklarieren. Folgendes ist ein Code-Snippet.

    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

Sie UtteranceProgressListener registrieren können für tts Start- und Endzeiten und Fehlerbehandlung.

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

     } 

     @Override 
     public void onDone(String s) { 

     } 

     @Override 
     public void onError(String s) { 

     } 
     }); 
+0

Ich habe auch versucht, dies durch sprechen zu erklären() in onStart() und Change-Symbol in ondone(). aber beide funktionieren nicht –

+0

Bitte legen Sie die Protokolle und debuggte und prüfen, ob sie angerufen werden oder nicht? oder gib den ganzen Code von TTS ein. –

+0

@ReyanshMishra ich eingecheckt Debugger. Es wurde nicht onStart(), onDone() eingegeben. Ich habe es auch mit setOnUtentenceCompletedListener() versucht. das hat auch nicht funktioniert. –

Verwandte Themen