2014-09-26 105 views
7

我已設置:安卓:媒體播放器時間問題

mSeekBar.setMax(mp.getDuration()); // 8480 

AUDIOFILE完成後,我所得到的是:

player.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
        public void onCompletion(MediaPlayer mediaPlayer) 
        { 
         Log.e("onComplete>>", ""+mediaPlayer.getCurrentPosition()); 

         // mediaPlayer.getCurrentPosition() = 8192 

         Log.e("getDuration", ""+mediaPlayer.getDuration()); 

         // mediaPlayer.getDuration() = 8480 

         if(mediaPlayer.getCurrentPosition()>=mediaPlayer.getDuration()) 
         { 
          // Why never get called??? 
         } 
        } 
       }); 

那麼,爲什麼MediaPlayer的當前位置從未達到總音頻文件的持續時間?

或在技術上我們可以說爲:

爲什麼不呢?

mediaPlayer.getCurrentPosition()==mediaPlayer.getDuration() 

爲什麼總是

mediaPlayer.getCurrentPosition()< mediaPlayer.getDuration() 在OnCompletion監聽器?

例如:

我有一個播放符號開始播放。現在當我按符號它將轉換爲暫停符號。

我有一個audiodfile的Maxduration。

現在我想轉換暫停符號到播放音頻文件完全播放時的符號。 所以我現在做的是檢查:

if(mediaPlayer.getCurrentPosition()>=mediaPlayer.getDuration()) 
{ 
     // Convert Imagview from Pause to Play  
     // But never get called     
} 
+0

什麼Log.i的輸出' (「onComplete >>」,「」+ mediaPlayer.getCurrentPosition()); Log.i(「getDuration」,「」+ mediaPlayer.getDuration());' – 2014-09-26 10:31:22

+0

當前位置總是小於GetDuration。 – 2014-09-26 10:32:07

+1

嗯..我發現一個[問題線程](https://code.google.com/p/android/issues/detail?id=38627)相同,但不知道是否有人找到解決方案或解釋。 。和[this](http://www.anddev.org/multimedia-problems-f28/mediaplayer-getcurrentposition-t20032.html)。 – 2014-09-26 10:41:07

回答

0

如果你需要通過檢查currentPoision到時間上做一些完成任務,你可以做以下伎倆:

if(mediaPlayer.getDuration()-mediaPlayer.getCurrentPosition()<1000){//milliseconds 
    new Handler().postDelayed(
    new Runnable() { 
     @Override 
     public void run() { 
      // Convert Imageview from Pause to Play  
     } 
    },1000); 
}