Videoview暂停和恢复

Ath*_*hos 40 lifecycle android android-videoview

我是Android开发新手,我正在编写游戏.我的游戏在每个级别开始之前都有过程,并且通过视频查看完成过程.我的问题是,在应用程序暂停时,cutceen在恢复时从头开始.

    @Override
public void onPause() {
    super.onPause();
    video.pause();
}
@Override
public void onResume()
{
    super.onResume();
    video.resume();
}
Run Code Online (Sandbox Code Playgroud)

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

San*_*tel 58

你可以用它

@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
}
Run Code Online (Sandbox Code Playgroud)

原帖

  • 对我不起作用。反正它只是从头开始... Android 4.4.4 (2认同)
  • 顺便说一句,上述解决方案的工作流程最简单。@JohnyTex https://examples.javacodegeeks.com/android/android-videoview-example/带有代码的漂亮示例,可能会对您有所帮助。 (2认同)
  • @SanketPatel 只是澄清当前选择的正确答案可能不适合任何现代版本的 Android。当这个问题得到答案时,我真的不在乎。它被索引在谷歌第一页的顶部,所以我只是想让它更相关一点。如果有关于旧问题/答案的 SO 指南,请告诉我。谢谢! (2认同)

Kha*_*.NT 22

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

解:

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
    }   
}
Run Code Online (Sandbox Code Playgroud)

  • 调用`mp.start()`时,我收到了IllegalStateException (6认同)

Fly*_*n81 17

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

  • 不,这不对.它从视频的开头开始. (11认同)
  • 它搞砸了,但是在pause()工作后start()和在Nexus Player(5.1.1)上没有resume(). (3认同)

小智 13

在OnPause中,您可以获得当前位置.

length=mVideoView.getCurrentPosition();
Run Code Online (Sandbox Code Playgroud)

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

mVideoView.seekTo(length);
mVideoView.start()
Run Code Online (Sandbox Code Playgroud)

工作正常.

  • 当我采用这种方法时,对我来说似乎并不精确.当我在暂停后启动它时,它似乎在视频中稍微跳了一下. (8认同)