mediaplayer的getDuration()方法为某些音频文件提供了错误的值。我认为所有这些文件的共同特点是,它们是使用大胆或其他音频编辑工具操纵的。当试图将mediaplayer进度与进度条绑定时,这是一个问题。
我继续记录下来:

while(mPlayer.isPlaying())
    Log.i("progress/total",
            mPlayer.getCurrentPosition() +
            "/" + mPlayer.getDuration());

找到这个:
I/progress/total(643): 14615/14620
I/progress/total(643): 14647/14620

这仅仅是两个数千的日志行,但关键是在进度通过getDuration()认为是歌曲总持续时间之后,它就继续运行。因为mediaplayer实际上可以给出正确的持续时间总和,有没有办法使用它来获得progressbar的适当最大值?

最佳答案

当mediaplayer.getDuration()为MP3文件返回542434毫秒时,我遇到了类似的问题(HTC Desire C with ICS 4.0.3)。
文件本身大约是89秒,差别太大了。
我查看了MP3文件内容,发现了一些奇怪的XML,比如:

<?xpacket begin="п»ї" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 4.2.2-c063 53.351735, 2008/07/22-18:04:26        ">

将此文件另存为新文件后,XML被删除,getDuration()返回正确的值。
我知道它不会帮助那些需要播放你不能修改的文件的人,但对于那些可以-它应该帮助。

10-07 20:53