Видеовьюв пауз - PullRequest
       8

Видеовьюв пауз

38 голосов
/ 03 сентября 2011

Я новичок в разработке для Android и программирую игру.В моей игре есть ролики, которые играют перед началом каждого уровня, ролики, которые выполняются посредством видеовьюва.Моя проблема в том, что после приостановки приложения ролик начинается снова и снова с самого начала.

    @Override
public void onPause() {
    super.onPause();
    video.pause();
}
@Override
public void onResume()
{
    super.onResume();
    video.resume();
}

Наша проблема в том, что видео фактически не возобновляется с того места, где мы его приостановили, а с самого начала.

Ответы [ 6 ]

53 голосов
/ 08 октября 2013

Вы можете использовать это

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

оригинальный пост

21 голосов
/ 13 августа 2015

Не следует использовать video.pause (), video.resume (), потому что при его вызове данные буферизации будут потеряны. Это также причина, почему VideoView играют в НАЧАЛЕ всякий раз, когда вы вызываете video.resume (). Видеть это: 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
    }   
}
17 голосов
/ 13 марта 2012

Вместо resume(), снова используйте start().
Воспроизведение начнется с того места, где вы приостановили видео.

12 голосов
/ 01 мая 2013

В OnPause вы можете получить текущую позицию.

length=mVideoView.getCurrentPosition();

и использование значения длины в OnResume ().

mVideoView.seekTo(length);
mVideoView.start()

работает нормально.

0 голосов
/ 04 февраля 2018

Просто используйте метод onSaveInstanseState вместо onPause и используйте onRestart вместо onResume.Это определенно будет работать.Ура!

0 голосов
/ 11 ноября 2016

Пожалуйста, попробуйте ниже код, он будет работать абсолютно нормально

 @Override
public void onPause() {
    super.onPause();
    stopPosition = videoView.getCurrentPosition(); //stopPosition is an int
    if (videoView.isPlaying())
        videoView.pause();
}

@Override
public void onResume() {
    super.onResume();
    if (videoView != null) {
        videoView.seekTo(stopPosition);
    }
}

пожалуйста, убедитесь, что в вашем Manifest.xml

<activity
        android:name="<Video Play Activity Name Here>"
        android:configChanges="orientation|keyboardHidden|screenSize" 
        android:screenOrientation="landscape"
        ></activity>
указана строка ниже
...