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

Videoview Приостановка и возобновление

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

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

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

4b9b3361

Ответ 1

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

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

оригинальное сообщение

Ответ 2

Не следует использовать video.pause(), video.resume(), потому что когда вы его вызываете, данные буферизации будут потеряны. Это также причина, по которой WHEW VideoView играет в BEGINNING, когда вы вызываете 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
    }   
}

Ответ 3

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

Ответ 4

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

length=mVideoView.getCurrentPosition();

и значение длины в OnResume().

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

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

Ответ 5

    int stopPosition;   // Globally declare class level...
    @Override
    public void onPause() {
        super.onPause();  
        onPauseVideoView();
    }

    @Override
    public void onResume() {
        super.onResume();
        Log.e("WatchVideoAd Fragment", "onPause called");

        onResumeVideoView();
    }

    private void onPauseVideoView() {
        stopPosition = videoview.getCurrentPosition(); //stopPosition is an int
        videoview.pause();
    }

    private void onResumeVideoView() {
        videoview.seekTo(stopPosition);
        videoview.start(); //Or use resume() if it does not work. I'm not sure
    }

onHiddenChanged в случае фрагмента

  @Override
    public void onHiddenChanged(boolean hidden) {
        super.onHiddenChanged(hidden);
        if (!hidden) {
            if (getActivity() != null) {
                ((AppActivity) getActivity()).updateTitle(getResources().getString(R.string.title_game));
            }
            Log.e("keshav", "WatchVideoAd Fragment  ");
            onResumeVideoView();

        } else {

            Log.e("keshav", "WatchVideoAd Fragment else ");
            onPauseVideoView();
        }
    }

Ответ 6

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

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

Ответ 7

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