从简历中继续播放VideoView
我有一个VideoView,当我开始一个电子邮件意图时它会暂停。当电子邮件意图完成后,我希望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从停止的位置恢复。
这个怎么样:
@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()调用从包中stopPosition并设置它在全球
@Override
protected void onCreate(Bundle args) {
super.onCreate(args);
if(args != null) {
stopPosition = args.getInt("position");
}
使用seekTo
给出了一个轻微的闪烁efeect再次开始视频。更好的方法是使用pause()
和start()
方法MediaPlayer
类而不是使用来自VideoView
的方法。 VideoView
的start()
方法从头开始重新开始视频,但start()
方法MediaPlayer
如果先前已调用pause()
方法,则重新开始播放视频。
下面是官方Android医生说
公共无效的start()
在API级别1开始或继续播放。如果先前已暂停播放 ,则播放将从暂停的 处继续播放。如果播放已停止,或从未开始播放,则将从头开始播放。
你可以得到一个VideoView
在VideoView
OnPreparedListener
相关的MediaPlayer
。
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();
非常简单而有效的解决方案。希望能帮助到你!
优秀的答案!但是...我想知道为什么suspend()和resume()方法?如果暂停/开始做的伎俩。 – 2014-06-05 14:42:59
@NicolasJafelle VideoView'resume'方法似乎没有工作。它从一开始就开始播放视频。可能是'VideoView'的一些错误。 'suspend()'是从内存中释放视频。它在内部执行'MediaPlayer''resese()'。 – 2014-06-05 15:06:36
在我的应用程序中,它给出了调用mMediaPlayer.start()的illegalStateException;在恢复中 – beginner 2016-08-10 12:48:26
你可以在onSaveInstanceState(Bundle outState)期间在outState中存储你的'stopPosition',比你可以在你的活动中使用onCreate(Bundle savedInstanceState)提取它。 – Entreco 2012-12-28 15:00:33