我需要我的应用程序运行多个mp3的方法。每个mp3都必须在上一个mp3之后播放。我创建了播放声音的方法
void PlaySentence(String path){
try {
AssetFileDescriptor afd = getAssets().openFd(path);
player = new MediaPlayer();
player.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
player.prepare();
player.start();
}
catch (Exception ex)
{
if (BuildConfig.DEBUG)
Log.d(TAGName, ex.getMessage());
}
}
然后我在OnCreate中调用该函数。我使用while循环播放所有mp3文件。但声音相互混杂。如果我使用循环和isPlaying方法,应用程序没有响应。
while (currentMp3<totalMp3) {
if (!player.isPlaying()) {
PlaySentence();
}
}
我也使用下面的方法来避免混合声音。它适用于一个mp3
player.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
public void onCompletion(MediaPlayer mp) {
PlaySentence();
}
});
最好的解决方案是什么?
您应该使用setOnCompletionListener,但将您的播放器声明为类成员,在onCreate中初始化它,并且不要为每个mp3创建新的播放器。PlaySentence应该是:
void PlaySentence(String path){
try {
AssetFileDescriptor afd = getAssets().openFd(path);
player.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
player.prepare();
player.start();
}
catch (Exception ex)
{
if (BuildConfig.DEBUG)
Log.d(TAGName, ex.getMessage());
}
}