2013-05-12 225 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