Videoview Pausing and resuming

后端 未结 7 609
青春惊慌失措
青春惊慌失措 2020-12-08 06:19

I am new to android development and I am programming a game. My game has cutsceens that play before each level starts, cutsceens which are done through videoview. My problem

相关标签:
7条回答
  • 2020-12-08 06:59

    In OnPause you can get the current position .

    length=mVideoView.getCurrentPosition();
    

    and length value use in OnResume ().

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

    working fine .

    0 讨论(0)
  • 2020-12-08 06:59

    Just use onSaveInstanseState method instead of onPause and use onRestart instead of onResume. It will definitely work. Cheers !

    0 讨论(0)
  • 2020-12-08 07:04
        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 in case of 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();
            }
        }
    
    0 讨论(0)
  • 2020-12-08 07:05

    You can use this

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

    original post

    0 讨论(0)
  • 2020-12-08 07:06

    Instead of resume(), use start() again.
    It will start the playback from the point where you paused the video.

    0 讨论(0)
  • 2020-12-08 07:14

    Shouldn't use video.pause(), video.resume(), because when you call it, the buffering data will be lost. That is also the reason WHY VideoView play at BEGINNING whenever you call video.resume(). See it: VideoView onResume loses buffered portion of the video

    Solution:

    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
        }   
    }
    
    0 讨论(0)
提交回复
热议问题