本文地址:VideoView中getDuration()和getCurrentPosition()获取错误的问题
这几天在做一个App内嵌VideoView的工作。
要实现正在播放的时候,按home键到桌面后,再进入该App,视频还在刚才的进度上播放。
实现思路是再onStop()中调用videoView.getCurrentPosition();但是总有几次获取到的值为0,好像不太稳定,而每次getDuration()时,得到的都是-1.
后面查看他们的源码:
@Override
public int getCurrentPosition() {
if (isInPlaybackState()) {
return mMediaPlayer.getCurrentPosition();
}
return 0;
}
发现都有一个
isInPlaybackState()
判断播放状态的,内部的代码为:
private boolean isInPlaybackState() {
return (mMediaPlayer != null &&
mCurrentState != STATE_ERROR &&
mCurrentState != STATE_IDLE &&
mCurrentState != STATE_PREPARING);
}
而该类内部总共定义的状态有:
// all possible internal states
private static final int STATE_ERROR = -1;
private static final int STATE_IDLE = 0;
private static final int STATE_PREPARING = 1;
private static final int STATE_PREPARED = 2;
private static final int STATE_PLAYING = 3;
private static final int STATE_PAUSED = 4;
private static final int STATE_PLAYBACK_COMPLETED = 5;
所以,当Activity处于后台时,肯定不是后面三个状态。
也就是说
<pre name="code" class="java">isInPlaybackState()
一定是false,所以在onStop()时一定获取不到正常的毫秒值。
而后,我在onPause()时获取,就可以。
最后总结:在onStop()、onRestart()中都不能正常获取到正常的毫秒值,
在onPause()中可以获取到。
具体内部细节,还需要进一步了解。