首页 文章

Android Media播放器继续进行预制最佳实践

提问于
浏览
0

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

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

1 回答

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

    但这应该给你的想法 .

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

相关问题