我试图找出如何使用android的MediaPlayer方法setNextMediaPlayer,它应该从一个播放器(歌曲)平滑过渡到另一个播放器。但由于缺乏文档,因此不知道如何使用该方法。
这就是我所做的,它不起作用:
final MediaPlayer mp1 = new MediaPlayer();
final MediaPlayer mp2 = new MediaPlayer();
try {
mp1.setDataSource("http://song1.MP3");
mp2.setDataSource("http://song2.mp3");
mp1.prepareAsync();
mp1.setOnPreparedListener(new OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp1.start();
}
});
mp1.setNextMediaPlayer(mp2);
mp1.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
mp2.prepareAsync();
mp2.setOnPreparedListener(new OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp2.start();
}
});
}
});
} catch (IllegalArgumentException e) {}
所以第一首歌就播放了。但在完成后第二次没有开始。
答案 0 :(得分:0)
让它发挥作用。
mp1.setDataSource(song1);
mp1.prepareAsync();
mp1.setOnPreparedListener(new OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp1.start();
}
});
//mp1.start();
//mp1.seekTo(1000*100);
mp2.setDataSource(song2);
mp2.prepare();
mp1.setNextMediaPlayer(mp2);
唯一的问题是第二个媒体播放器不能被称为async(即mp2.prepareAsync())。我不知道为什么,但是如果你尝试它就不会启动,这是一件坏事:/。
答案 1 :(得分:-1)
MediaPlayer setNextMediaPlayer给出了很多问题我的工作是: 在onCompletion()中重置()mediaplayer,setDataSource()和prepareAsync()。
像这样的东西
mp1.setDataSource("http://song1.MP3");
mp1.prepareAsync();
mp1.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp1.start();
}
});
mp1.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
mp1.reset();
//ADD FLAG FOR STOP
try {
mp1.setDataSource("http://song2.mp3");
} catch (IOException e) {
e.printStackTrace();
}
mp1.prepareAsync();
}
});
然后在onCompletion中你需要一些标志来检查最后一首歌是否被播放停止,因为我发布的代码将在最后一首歌中循环。