在Android媒体播放器中重新加载数据源

时间:2012-11-09 13:09:47

标签: android android-mediaplayer seek

我在Android的媒体播放器上遇到了困难。基本上我尝试从我的SD卡上播放一首正在下载的歌曲(某种流媒体)。因此,在下载歌曲(20%)之后,这首歌开始播放,如果我这样离开,它可以正常工作直到结束。但是,如果我试图在最后搜索(超过20%)显然它将无法工作,因为我的搜索位置超过了EOF文件所以我在一个方法中创建了这个代码

        MediaPlayer mp = new MediaPlayer();
        mp.setDataSource(sFilePath);
        mp.prepare();
        int offset = (progress * mp.getDuration()) / 100;
        if (sCompleted) return;
        sLastSeek = offset;

        if (offset > sMediaPlayer.getDuration()) {
            sMediaPlayer.reset();
            sMediaPlayer.setDataSource(sFilePath);
            sMediaPlayer.prepare();
       } else {
           sMediaPlayer.seekTo(offset);
       }

sMediaPlayer是我的mediaPlayer,sFilePath是文件路径。从理论上讲,我提到的案例应该被覆盖,但是当我寻找文件长度时,播放器被重置(如代码所示)但是没有播放,这是非常尴尬的并且超出了我的能力。

1 个答案:

答案 0 :(得分:0)

也许mediaPlayer因为它到达歌曲的结尾而停止。要么再次启动它,要以稳定的间隔刷新文件(比如说每5秒),或者只使用onCompletionListener。在最后一种情况下,当文件结束时,你可以重新加载文件并继续播放... mp.getCurrentPosition()以获得它停止播放的位置。

我也注意到你引用了sMediaPlayer,但你的MediaPlayer被定义为mp。