3

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

MediaPlayer player = MediaPlayer.create(this, R.raw.background_music);
player.setLooping(true); 

问题是它不能很好地“循环”:我的意思是,当 mp3 文件结束时,在重新开始之前会有一秒钟的沉默。但是,在 mp3 文件中,实际上,没有一秒钟的沉默。

我怎么解决这个问题?

4

2 回答 2

3

你不能。这个错误已经存在很长时间了,但他们仍然没有修复它,而且看起来他们不会在不久的将来这样做!

http://code.google.com/p/android/issues/detail?id=18756

于 2013-02-22T11:44:49.150 回答
0

您可以尝试使用 SoundPool 来播放您的音频文件(它可以很好地循环播放并且没有延迟,但可能不适合某些音频资源)。

这是某种实现(弃用删除和适当关闭资源留作家庭作业:))

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();

从另一方面来说,如果 MediaPlayer 是必须的,你可能会研究方法setNextMediaPlayer。所以想法是为同一个文件初始化几个 MediaPlayer(真是一团糟)并以一种智能的方式设置它们。

于 2015-11-05T08:07:42.187 回答