Подтвердить что ты не робот

Возобновить воспроизведение видеоизображения с 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
}

Как я могу вернуть видеопросмотр с того места, где он остановился.

4b9b3361

Ответ 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();

Очень простое, но эффективное решение. Надеюсь, это поможет!