22

我有一个 VideoView,当我启动电子邮件意图时它会暂停。完成电子邮件意图后,我希望 videoView 继续播放,但是,它会从头开始。

@Override
public void onPause() {
    Log.d(TAG, "onPause called");
    super.onPause();
    videoView.pause();
}
@Override
public void onResume() {
    super.onResume();
    Log.d(TAG, "onResume called");
    videoView.start();//resume() doesnt work
}

我怎样才能让 videoView 从它停止的地方恢复。

4

2 回答 2

34

那这个呢:

@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
}

// This gets called before onPause so pause video here.
@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    stopPosition = videoView.getCurrentPosition(); 
    videoView.pause();
    outState.putInt("position", stopPosition);
}   

然后在你的 onCreate() 中调用 bundle 中的 stopPosition 并在全局范围内设置它

@Override
protected void onCreate(Bundle args) {
    super.onCreate(args);
    if( args != null ) {
        stopPosition = args.getInt("position");
    }
于 2012-08-14T21:17:49.227 回答
22

使用seekTo会在恢复视频时产生轻微的闪烁效果。更好的方法是使用pause()类的start()方法,MediaPlayer而不是使用VideoView. 的start()方法VideoView从头开始重新开始视频,但如果之前调用了该start()方法,MediaPlayer则恢复视频的方法。pause()

这是官方 android 文档所说的

公共无效开始()

在 API 级别 1 中添加 开始或恢复播放。如果之前已暂停播放,则播放将从暂停的位置继续。如果播放已停止,或以前从未开始,则播放将从头开始。

您可以获得MediaPlayerVideoViewin OnPreparedListenerof相关联的VideoView

public class MainActivity extends Activity {

    private MediaPlayer mMediaPlayer;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        VideoView videoView = (VideoView) findViewById(R.id.videoView1);
        videoView.setVideoPath(path);
        videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {

            @Override
            public void onPrepared(MediaPlayer mp) {
                mMediaPlayer = mp;

            }
        });
    }

}

然后可以在对象本身上调用后续pause()和方法。resume()MediaPlayer

//To pause the video
 mMediaPlayer.pause();

//To resume the video
mMediaPlayer.start();

非常简单而有效的解决方案。希望能帮助到你!

于 2014-03-12T16:38:54.040 回答