2014-09-26 106 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); 
}