2011-01-25 20 views
4

私は本当に何かに苦しんでいます...私は、口頭でtts speek機能を介して、そして画面上のテキストを介して一度に文章。Android:ttsが終了するまで待ってから続行

私はテキストビュー領域を準備していますが、それをまとめることは私が得意でないことです。いずれかの文章を読み、最後の文章のみを表示するか、最初の文章のみを表示して読み上げるかのいずれかです。

私はこの目標をどのように達成できますか?

答えて

-1
boolean speakingEnd = tts.isSpeaking(); 
do{ 
    speakingEnd = tts.isSpeaking(); 
} while (speakingEnd); 
//Continue with code 
1
public void speak(String message){   
    tts.speak(message, TextToSpeech.QUEUE_FLUSH, null); 
    while (tts.isSpeaking()){ 
     System.Out.Println("Do something or nothing while speaking..") 
    } 
} 
3

私はちょうどUtteranceProgressListenerを使用し、speak methodによると、この問題に走りました。これはUIスレッドでは実行されないことがわかったので、runOnUiThread()を使用してアクティビティを更新する必要がありました。

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

     } 

     @Override 
     public void onDone(String utteranceId) { 
      LettersActivity.this.runOnUiThread(new Runnable() { 
       @Override 
       public void run() { 
        // Do something on UI thread 
       } 
      }); 
     } 

     @Override 
     public void onError(String utteranceId) { 
      Log.e(TAG, "error on " + utteranceId); 
     } 
    }); 
+0

おかげだけで実行されているAPI> = 15をお試しください – mesutpiskin

0

この

public class MainActivity extends AppCompatActivity implements TextToSpeech.OnInitListener{ 


    private boolean initialized; 
    private String queuedText; 
    private String TAG = "TTS"; 
    private TextToSpeech tts; 




    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 



     tts = new TextToSpeech(this /* context */, this /* listener */); 
     tts.setOnUtteranceProgressListener(mProgressListener); 


     speak("hello world"); 

    } 




    public void speak(String text) { 

     if (!initialized) { 
      queuedText = text; 
      return; 
     } 
     queuedText = null; 

     setTtsListener(); // no longer creates a new UtteranceProgressListener each time 
     HashMap<String, String> map = new HashMap<String, String>(); 
     map.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, "MessageId"); 
     tts.speak(text, TextToSpeech.QUEUE_ADD, map); 
    } 


    private void setTtsListener() { 

    } 





    @Override 
    public void onInit(int status) { 
     if (status == TextToSpeech.SUCCESS) { 
      initialized = true; 
      tts.setLanguage(Locale.ENGLISH); 

      if (queuedText != null) { 
       speak(queuedText); 
      } 
     } 
    } 



    private abstract class runnable implements Runnable { 
    } 




    private UtteranceProgressListener mProgressListener = new UtteranceProgressListener() { 
     @Override 
     public void onStart(String utteranceId) { 
     } // Do nothing 

     @Override 
     public void onError(String utteranceId) { 
     } // Do nothing. 

     @Override 
     public void onDone(String utteranceId) { 

      new Thread() 
      { 
       public void run() 
       { 
        MainActivity.this.runOnUiThread(new runnable() 
        { 
         public void run() 
         { 

          Toast.makeText(getBaseContext(), "TTS Completed", Toast.LENGTH_SHORT).show(); 

         } 
        }); 
       } 
      }.start(); 

     } 
    }; 


} 
関連する問題