2012-11-09 55 views
3

Hy, 我在Android中遇到了媒體播放器的困難。基本上我嘗試播放我的SD卡下載(某種流)的歌曲。所以在下載歌曲(20%)後,歌曲開始播放,如果我將它放在這樣的位置,它會一直工作到結束,但如果我試圖在最後找到(超過20%),顯然它不會工作,因爲我尋求的位置是在EOF文件,所以我的方法在Android媒體播放器中重新加載數據源

 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是我的媒體播放器內使這個代碼,sFilePath是文件路徑。理論上,我提出的案例應該被涵蓋,但是當我尋求文件長度時,玩家被重置(如代碼所述),但是不玩,並且這是非常尷尬並且超過了我的力量

如果您有任何想法請分享。在此先感謝

+0

您是否嘗試在seekTo()之前調用start,如果您不調用start(),則播放將不會自動恢復。此外,您應該使用異步方法準備稱爲「prepareAsync」的流應用程序。 – Shiv

+0

是的,玩家已經開始了,並且已經嘗試了prepareAsync(),但結果是一樣的。 – George

+0

一個小的添加,我創建了這個應用程序的Android 4.0,因爲我看到在谷歌論壇上,在Android 2.1有seekTo()方法的問題,所以這裏不是這樣的情況了 – George

回答

0

也許mediaPlayer停止,因爲它到達歌曲的結尾。重新啓動它,以穩定的時間間隔刷新文件(比如說每5秒),或者使用onCompletionListener。在最後一種情況下,當文件結束時,您可以重新加載文件並繼續播放... mp.getCurrentPosition()以獲取停止播放的位置。

我也注意到你指的是sMediaPlayer,但是你的MediaPlayer被定義爲mp。