安卓:媒体播放器时长问题

8

我已经设置:

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()

为什么在OnCompletion监听器中使用 mediaPlayer.getCurrentPosition() < mediaPlayer.getDuration()

例如:

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

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

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

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

请问以下代码的输出结果是什么?Log.i("onComplete>>", ""+mediaPlayer.getCurrentPosition()); Log.i("getDuration", ""+mediaPlayer.getDuration()); - MysticMagicϡ
当前位置始终小于获取持续时间。 - Sagar Shah
1
嗯...我找到了一个相同的问题线程,但不知道是否有人已经找到解决方案或解释了..还有这个 - MysticMagicϡ
好的,我会尝试同时运行另一个线程来测试它。但奇怪的是,OnCompletionListener() 也不能提供正确的 getCurrentPosition() 值。 - Sagar Shah
我有一种预感,在 onCompletion 中,曲目已经完成,所以可能会重置到起始位置,因此它不同于总时长。但这只是一个猜测。 :) - MysticMagicϡ
不,我已经在OnSeekBarchangeListener和runnable本身中测试了getDuration(),发现getCurrentPosition()从未达到大于等于getDuration()。 - Sagar Shah
1个回答

0

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接