2013-05-12 277 views
1

我在我的應用程序中有一個viewpager。當用戶向右/左滑動時,我使用TTS引擎說出文字和MediaPlayer播放聲音。TTS和播放聲音 - Android

問題是同時播放..一旦TTS引擎說文本結束,我該如何播放聲音?

P.S:我不想使用睡眠或等待。

更新:

這裏是我的代碼:

@SuppressLint("NewApi") 
@SuppressWarnings("deprecation") 
@Override 
public void onInit(int status) { 
    if (status == TextToSpeech.SUCCESS) { 

     if (result == TextToSpeech.LANG_MISSING_DATA 
       || result == TextToSpeech.LANG_NOT_SUPPORTED) { 
     } else { 
      //Do Something here 
     } 


     if(Build.VERSION.SDK_INT >= 15){ 
      UtteranceProgressListener listener = new UtteranceProgressListener() { 

       @Override 
       public void onStart(String utteranceId) { 
        // TODO Auto-generated method stub 

       } 

       @Override 
       public void onError(String utteranceId) { 
        // TODO Auto-generated method stub 

       } 

       @Override 
       public void onDone(String utteranceId) { 
        // TODO Auto-generated method stub 
        //start MediaPlayer 
        playMedia(viewPager.getCurrentItem()); 
       } 
      }; 
      tts.setOnUtteranceProgressListener(listener); 
     } 
     else{ 
      tts.setOnUtteranceCompletedListener(new OnUtteranceCompletedListener(){ 

       @Override 
       public void onUtteranceCompleted(String arg0) { 
        playMedia(viewPager.getCurrentItem()); 
       } 

       }); 
     } 
    } else { 
     Intent installIntent = new Intent(); 
     installIntent.setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA); 
     startActivity(installIntent); 
    } 
} 
+0

您現在使用的是什麼代碼? – 2013-05-12 17:51:19

回答

2

Android中他們有兩個的API檢測,如果TTS引擎說完:

  • > Android 4(ICS)

    UtteranceProgressListener listener = new UtteranceProgressListener() { 
    
        @Override 
        public void onStart(String utteranceId) { 
         // TODO Auto-generated method stub 
    
        } 
    
        @Override 
        public void onError(String utteranceId) { 
         // TODO Auto-generated method stub 
    
        } 
    
        @Override 
        public void onDone(String utteranceId) { 
         // TODO Auto-generated method stub 
         //start MediaPlayer 
        } 
    }; 
        yourTTSObject.setOnUtteranceProgressListener(listener); 
    
  • Perior到ICS Android 4.0的你可以使用:

    yourTTSObject.setOnUtteranceCompletedListener(new OnUtteranceCompletedListener(){ 
    
        @Override 
        public void onUtteranceCompleted(String arg0) { 
          // start your mediaplayer here 
        } 
    
        }); 
    

    在單證here

+0

感謝您的提示。我嘗試使用你的代碼..但它不起作用。請檢查我更新的問題(我粘貼了代碼供您參考)。 – Naveen 2013-05-12 18:49:54

+0

我很久以來一直在很多項目上使用這樣的代碼,並在很多設備上進行了測試。例如嘗試追蹤代碼執行(通過使用斷點或logcat)並查看它是如何執行的。 – 2013-05-12 21:43:34

+0

謝謝..會檢查。 – Naveen 2013-05-13 05:26:03

6

你必須給它一個id PARAM看一看。否則它不會呼叫收聽者:

HashMap<String, String> params = new HashMap<String, String>(); 
params.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID,"stringId"); 

textToSpeech.speak(string,TextToSpeech.QUEUE_ADD, params); 
+0

非常感謝,這對我非常有用!如果可以的話,我會給你5票。 – Micer 2013-11-06 15:30:46