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

Android:媒体播放器持续时间问题,android,media-player,android-mediaplayer,android-seekbar,Android,Media Player,Android Mediaplayer,Android Seekbar,我已设定: mSeekBar.setMax(mp.getDuration()); // 8480 完成音频文件后,我得到的是: player.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { public void onCompletion(MediaPlayer mediaPlayer) {

我已设定:

mSeekBar.setMax(mp.getDuration()); // 8480
完成音频文件后,我得到的是:

 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()
为什么总是这样

mediaPlayer.getCurrentPosition() 在OnCompletion侦听器中

例如:

我有一个Play符号用于启动玩家。现在,当我按下播放符号时,它将转换为暂停符号

我有一个最大持续时间的音频文件

现在,当音频文件完全播放时,我想将暂停符号转换为播放符号。 因此,我所做的是检查:

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

如果您需要通过检查持续时间来完成某些任务,您可以执行以下技巧:

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

if(mediaPlayer.getDuration()-mediaPlayer.getCurrentPosition())Log.i(“onComplete>>”、“+mediaPlayer.getCurrentPosition());Log.i(“getDuration”、“+mediaPlayer.getDuration())的输出是什么;
当前位置总是小于GetDuration。嗯……我找到了一个相同的,但不知道是否有人找到了解决方案或解释……还有。是的,我会同时运行另一个线程来尝试。但仍然奇怪的是OnCompletionListener()也没有为getCurrentPosition()提供正确的值.我有一种预感,在
onCompletion
中,轨道已经完成,因此可能会重置为起始位置,因此它与总持续时间不同。但这只是一个猜测。:)