setNextMediaPlayer无效

时间:2015-06-18 14:58:49

标签: android android-mediaplayer

我试图找出如何使用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) {}

所以第一首歌就播放了。但在完成后第二次没有开始。

2 个答案:

答案 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中你需要一些标志来检查最后一首歌是否被播放停止,因为我发布的代码将在最后一首歌中循环。