我已经设置:
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ϡonCompletion
中,曲目已经完成,所以可能会重置到起始位置,因此它不同于总时长。但这只是一个猜测。 :) - MysticMagicϡ