Android Media player不断准备最佳实践

时间:2013-09-17 12:29:05

标签: android android-mediaplayer

我有一个远程音乐流,其中网址会更改每首歌曲。
我不希望用户每次歌曲结束时都等待媒体播放器准备。
我实现这个的想法是创建两个媒体播放器实例,并在播放另一个媒体播放器期间加载下一首歌曲,并且当歌曲结束时在它们之间切换并准备下一首歌曲停止播放。

我想知道这样做是否是最好的做法,还是有另一种方法来实现这一点。

1 个答案:

答案 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并添加一些标志以了解您是否已准备好预加载(或完成预加载并准备就绪)等。

但这应该会给你一个想法。

通过在媒体播放器中调用重置/释放,不要忘记在完成后释放所有内容。