Возобновить воспроизведение видеоизображения с onResume
У меня есть 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
}
Как я могу вернуть видеопросмотр с того места, где он остановился.
Ответы
Ответ 1
Как насчет этого:
@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");
}
Ответ 2
Использование seekTo
дает небольшое мерцающее efeect при возобновлении видео. Лучше использовать методы pause()
и start()
класса MediaPlayer
вместо использования методов из VideoView
. Метод start()
VideoView
перезапускает видео с самого начала, но метод start()
MediaPlayer
возобновляет видео, если ранее был вызван метод pause()
.
Вот что говорится в официальном документе Android.
public void start()
Добавлен в уровень API 1 Запускает или возобновляет воспроизведение. Если воспроизведение ранее было приостановлено, воспроизведение будет продолжаться с того места, где оно было сделал паузу. Если воспроизведение было остановлено или никогда не запускалось раньше, воспроизведение начнется в начале.
Вы можете получить MediaPlayer
, связанный с VideoView
в OnPreparedListener
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();
Очень простое, но эффективное решение. Надеюсь, это поможет!