Android 我的mediaplayer没有';";“循环”;好

Android 我的mediaplayer没有';";“循环”;好,android,Android,我有一个扩展服务的类,我有一个MediaPlayer来管理我的应用程序的背景音乐 MediaPlayer player = MediaPlayer.create(this, R.raw.background_music); player.setLooping(true); 问题是它不能很好地“循环”:我的意思是,当mp3文件结束时,在它再次开始之前会有一秒钟的沉默。 但是,在mp3文件中,实际上,没有一秒钟的沉默 我怎样才能解决这个问题?你不能。这个bug已经存在很多年了,但是他们仍然没有修

我有一个扩展服务的类,我有一个MediaPlayer来管理我的应用程序的背景音乐

MediaPlayer player = MediaPlayer.create(this, R.raw.background_music);
player.setLooping(true); 
问题是它不能很好地“循环”:我的意思是,当mp3文件结束时,在它再次开始之前会有一秒钟的沉默。 但是,在mp3文件中,实际上,没有一秒钟的沉默


我怎样才能解决这个问题?

你不能。这个bug已经存在很多年了,但是他们仍然没有修复它,而且看起来他们在不久的将来也不会这么做


您可以尝试使用SoundPool来播放音频文件(它循环得非常好,没有延迟,但是对于某些音频资源可能不合适)

下面是一些实现(删除弃用和适当关闭资源是一个家庭作业:)


从另一个角度看,如果MediaPlayer是必须拥有的,您可以查看方法setNextMediaPlayer。因此,我们的想法是为同一个文件初始化多个MediaPlayer(太乱了),并以智能方式设置它们。

我同意bofredo android不支持免费音乐,仅支持5秒长的音频
SoundPool pool = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);
afd = getResources().openRawResourceFd(audioResource);
pool.setOnLoadCompleteListener(new OnLoadCompleteListener() {
    @Override
    public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {
        if (0 == status) {
            soundPool.play(sampleId, 1f, 1f, 10, -1 /* looping parameter */, 1f);
        }
    }
});
pool.load(afd, 10);
afd.close();