Videoview暂停和恢复

我是新来的android开发,我正在编程一个游戏。 我的游戏在每个级别开始之前玩过cutceens,通过videoview完成的cutceens。 我的问题是,在应用程序暂停时,cutceen重新开始时再次从头开始。

@Override public void onPause() { super.onPause(); video.pause(); } @Override public void onResume() { super.onResume(); video.resume(); } 

我们的问题是,video实际上并没有从我们暂停的地方恢复,而是从一开始。

你可以使用这个

 @Override public void onPause() { Log.d(TAG, "onPause called"); super.onPause(); stopPosition = videoView.getCurrentPosition(); //stopPosition is an int videoView.pause(); } @Override public void onResume() { super.onResume(); Log.d(TAG, "onResume called"); videoView.seekTo(stopPosition); videoView.start(); //Or use resume() if it doesn't work. I'm not sure } 

原来的职位

而不是resume() ,再次使用start()
它将从您暂停video的位置开始播放。

不应该使用video.pause(),video.resume(),因为当你调用它时,缓冲数据将会丢失。 这也是为什么每次调用video.resume()时VideoView在BEGINNING中播放的原因。 看到它: VideoView onResume失去了video的缓冲部分

解:

 VideoView videoView; MediaPlayer mp; videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { this.mp = mp; } }); public void pause(){ //NOT videoview.pause(); Needn't save Stop position if (mp != null){ mp.pause(); } } public void resume(){ //NOT videoview.resume(); if (mp != null){ mp.start(); //Video will begin where it stopped } } 

在OnPause你可以得到当前的位置。

 length=mVideoView.getCurrentPosition(); 

和长度值在OnResume()中使用。

 mVideoView.seekTo(length); mVideoView.start() 

工作正常。

请尝试下面的代码,它将工作绝对好

  @Override public void onPause() { super.onPause(); stopPosition = videoView.getCurrentPosition(); //stopPosition is an int if (videoView.isPlaying()) videoView.pause(); } @Override public void onResume() { super.onResume(); if (videoView != null) { videoView.seekTo(stopPosition); } } 

请确保您的Manifest.xml中提到了下面的行

 <activity android:name="<Video Play Activity Name Here>" android:configChanges="orientation|keyboardHidden|screenSize" android:screenOrientation="landscape" ></activity>