我的应用程序中有一个viewpager。当用户向左或向右滑动时,我使用TTS引擎来播放文本和MediaPlayer来播放声音。
问题是两者同时播放。我如何播放声音一旦TTS引擎说文本结束?
p。S:我不想用sleep或wait。
更新:下面是我的代码:@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);
}
}
你必须给它一个id参数。否则它不会调用侦听器:
HashMap<String, String> params = new HashMap<String, String>();
params.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID,"stringId");
textToSpeech.speak(string,TextToSpeech.QUEUE_ADD, params);
在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);
-
ICS Android 4.0版本您可以使用:
yourTTSObject.setOnUtteranceCompletedListener(new OnUtteranceCompletedListener(){ @Override public void onUtteranceCompleted(String arg0) { // start your mediaplayer here } });
查看这里的文档