Android:媒体播放器持续时间问题

Sag*_*hah 7 android media-player android-mediaplayer android-seekbar

我已经设定:

mSeekBar.setMax(mp.getDuration()); // 8480
Run Code Online (Sandbox Code Playgroud)

完成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???
                       }
                    }
                });
Run Code Online (Sandbox Code Playgroud)

那么,为什么MediaPlayer的当前位置永远不会达到音频文件的总持续时间?

或者在技术上我们可以说:

为什么不?

mediaPlayer.getCurrentPosition()==mediaPlayer.getDuration()
Run Code Online (Sandbox Code Playgroud)

为什么总是

OnCompletion侦听器中的mediaPlayer.getCurrentPosition()<mediaPlayer.getDuration()

例如:

我有一个播放符号来启动播放器.现在,当我按下播放符号时,它将转换为暂停符号.

我有一个audiodfile的Maxduration.

现在我想在完全播放音频文件时将暂停符号转换为播放符号.所以我正在做的是检查:

if(mediaPlayer.getCurrentPosition()>=mediaPlayer.getDuration())
{
       //  Convert Imagview from Pause to Play    
      // But never get called                   
}
Run Code Online (Sandbox Code Playgroud)

sup*_*_ms 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); 
}
Run Code Online (Sandbox Code Playgroud)