我有一个远程音乐流,其中网址会更改每首歌曲。
我不希望用户每次歌曲结束时都等待媒体播放器准备。
我实现这个的想法是创建两个媒体播放器实例,并在播放另一个媒体播放器期间加载下一首歌曲,并且当歌曲结束时在它们之间切换并准备下一首歌曲停止播放。
我想知道这样做是否是最好的做法,还是有另一种方法来实现这一点。
答案 0 :(得分:1)
仅供参考,我这样做了:
public MediaPlayer[] mediaPlayers;
public MediaPlayer currentMediaPlayer;
public MediaPlayer preloadMediaPlayer;
你可以启动它们:
private void initMediaPlayers() {
mediaPlayers = new MediaPlayer[MEDIA_PLAYER_COUNT];
mediaPlayers[0] = createMediaPlayer();
mediaPlayers[1] = createMediaPlayer();
currentMediaPlayer = mediaPlayers[0];
preloadMediaPlayer = mediaPlayers[1];
currentPlayerIndex = 0;
}
createMediaPlayer只是一个辅助方法:
private MediaPlayer createMediaPlayer() {
final MediaPlayer smp = new MediaPlayer();
smp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
//TODO: add your code here
}
});
smp.setOnErrorListener(new MediaPlayer.OnErrorListener() {
public boolean onError(MediaPlayer mp, int what, int extra) {
//TODO: add your own error handling
return true;
}
});
//TODO: add anything else you need
return smp;
}
然后,如果你想交换球员:
private void swapPlayers() {
if (currentPlayerIndex == 0) {
currentMediaPlayer = mediaPlayers[1];
preloadMediaPlayer = mediaPlayers[0];
currentPlayerIndex = 1;
} else if (currentPlayerIndex == 1) {
currentMediaPlayer = mediaPlayers[0];
preloadMediaPlayer = mediaPlayers[1];
currentPlayerIndex = 0;
}
}
这是一个简化版本,您可能需要扩展MediaPlayer并添加一些标志以了解您是否已准备好预加载(或完成预加载并准备就绪)等。
但这应该会给你一个想法。
通过在媒体播放器中调用重置/释放,不要忘记在完成后释放所有内容。