這幾天在做一個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處於后台時,肯定不是后面三個狀態。
也就是說
isInPlaybackState()
一定是false,所以在onStop()時一定獲取不到正常的毫秒值。
而后,我在onPause()時獲取,就可以。
最后總結:在onStop()、onRestart()中都不能正常獲取到正常的毫秒值,
在onPause()中可以獲取到。
具體內部細節,還需要進一步了解。