MediaPlayer不会循环播放。 setLooping()不起作用

时间:2015-02-17 16:33:20

标签: android

m_MediaPlayer = MediaPlayer.create(context, soundFromResource);
m_MediaPlayer.setVolume(0.99f, 0.99f);
m_MediaPlayer.setLooping(true);
m_MediaPlayer.setOnCompletionListener(USoundPlayback.this);
m_MediaPlayer.start();

我已经像上面那样对它进行了测试,我也在setLooping(true)之后调用了start()进行了测试,但没有运气。

我有两部Nexus 5部电话,两部都有Android 5。一方面,循环工作,另一方面声音一次停止,它不会循环。

有什么想法吗?!

4 个答案:

答案 0 :(得分:5)

Android 5设备使用NuPlayer而不是AwesomePlayer显然存在问题。

您可以通过Developer OptionsMedia部分下方Use NuPlayer (experimental)进行检查。我已经取消选中了,现在它似乎没问题了。

我还没有弄清楚如何解决这个问题,所以我已经把它砍了一下。我在代码中设置了一些标记,当它进入onCompletion时,如果用户没有专门停止声音,我会在那里重新启动它。如果有人有更好的解决方法,请告诉我,我会更新此答案。

问题在于:https://code.google.com/p/android-developer-preview/issues/detail?id=1695

答案 1 :(得分:1)

这是媒体播放器中的一个问题。

我使用下一个代码来解决这个问题:

mMediaPlayer.setOnCompletionListener(new OnCompletionListener() {
                @Override
                public void onCompletion(MediaPlayer mp) {
                    if (looping) {
                        mMediaPlayer.seekTo(0);
                    }
                }
            });

答案 2 :(得分:1)

在对媒体播放器进行了大量实验之后,我找到了解决方案:

致电

m_MediaPlayer.setLoopoing(true)

之后

m_MediaPlayer.start()

答案 3 :(得分:0)

我使用此解决方法解决了这个问题:

public static void setMpLooping(final MediaPlayer mp, final boolean isLooping) {
    if (Build.VERSION.SDK_INT == Build.VERSION_CODES.LOLLIPOP
            || Build.VERSION.SDK_INT == Build.VERSION_CODES.LOLLIPOP_MR1) {
        if (isLooping) {
            mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                @Override
                public void onCompletion(MediaPlayer mp) {
                    mp.start();
                }
            });
        } else {
            mp.setOnCompletionListener(null);
        }
    } else {
        mp.setLooping(isLooping);
    }
}

但是请记住,有时在Lollipop赛道的结束到赛道开始过程中有延迟