wake-up-neo.com

Videobild Anhalten und fortsetzen

Ich bin neu in der Android-Entwicklung und programmiere ein Spiel. Mein Spiel verfügt über Cutsceens, die vor Beginn jedes Levels abgespielt werden, Cutsceens, die per Videoview ausgeführt werden. Mein Problem ist, dass nach einer Anwendungspause der Cutsceen bei Wiederaufnahme von vorne beginnt. 

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

Unser Problem ist, dass das Video nicht wirklich dort beginnt, wo wir es angehalten haben, sondern von Anfang an. 

34
Athos

Sie können dies verwenden

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

ursprünglicher Beitrag

50
Sanket Patel

Sollte video.pause (), video.resume () nicht verwenden, da beim Aufrufen die Pufferdaten verloren gehen. Dies ist auch der Grund, warum VideoView bei jedem Aufruf von video.resume () zu Beginn abgespielt wird. Sehen Sie es sich an: VideoView onResume verliert den gepufferten Teil des Videos

Lösung:

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
    }   
}
22
Khang .NT

Verwenden Sie anstelle von resume() erneut start().
Die Wiedergabe beginnt an der Stelle, an der Sie das Video Pause.

17
Flynn81

In OnPause können Sie die aktuelle Position abrufen.

length=mVideoView.getCurrentPosition();

und Längenwert in OnResume () verwenden.

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

funktioniert gut .

11
    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 doesn't work. I'm not sure
    }

onHiddenChanged bei Fragment

  @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();
        }
    }
1
Keshav Gera

Bitte versuchen Sie es mit dem folgenden Code, es funktioniert absolut einwandfrei

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

bitte stellen Sie sicher, dass in Ihrer Manifest.xml die folgende Zeile angegeben ist

<activity
        Android:name="<Video Play Activity Name Here>"
        Android:configChanges="orientation|keyboardHidden|screenSize" 
        Android:screenOrientation="landscape"
        ></activity>
0
Anuj J Pandey

Verwenden Sie einfach die Methode onSaveInstanseState anstelle von onPause und verwenden Sie onRestart anstelle von onResume. Es wird definitiv funktionieren. Prost !

0
user8324061