【发布时间】:2014-09-26 10:30:20
【问题描述】:
我已经设置了:
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() 在 OnCompletion 监听器中?
例如:
我有一个用于启动播放器的 播放 符号。现在,当我按下 play 符号时,它将转换为 Pause 符号。
我有一个 Maxduration 的 audiodfile。
现在我想在音频文件完全播放时将 Pause 符号转换为 Play 符号。 所以我正在做的是检查:
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());的输出是什么 -
当前位置总是小于GetDuration。
-
嗯..我找到了一个issue thread,但不知道是否有人找到了解决方案或解释..还有this。
-
是的,我将通过同时运行另一个线程来尝试它。但仍然奇怪的是 OnCompletionListener() 也没有为 getCurrentPosition() 提供正确的值。
-
我有一种预感,在
onCompletion的轨道已经完成,所以可能会重置到起始位置,所以它与总时长不同。但这只是一个疯狂的猜测。 :)
标签: android media-player android-mediaplayer android-seekbar