Android MediaPlayer对象在方向更改后变为空?

Android MediaPlayer对象在方向更改后变为空?,android,video-streaming,android-mediaplayer,android-seekbar,Android,Video Streaming,Android Mediaplayer,Android Seekbar,我正在尝试做视频流,这是工作良好的肖像模式。然后,我添加了onConfigurationChange的代码,为横向模式膨胀另一个布局。但我的应用程序在这条线上崩溃了: int timeElapsed = mediaPlayer.getCurrentPosition(); 在这里,当mediaPlayer已经初始化时,我将其设置为null MediaPlayer mediaPlayer; public void onCreate(final Bundle savedInstanceS

我正在尝试做视频流,这是工作良好的肖像模式。然后,我添加了onConfigurationChange的代码,为横向模式膨胀另一个布局。但我的应用程序在这条线上崩溃了:

int timeElapsed = mediaPlayer.getCurrentPosition();
在这里,当mediaPlayer已经初始化时,我将其设置为null

 MediaPlayer mediaPlayer;
     public void onCreate(final Bundle savedInstanceState) {

            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_detailvideo);
            context = this;
             mediaPlayer = new MediaPlayer();
            videoView = (VideoViewCustom) findViewById(R.id.videoplayer);
                try {
           videoView.setDimensions(1000, 200);
           videoView.getHolder().setFixedSize(1000, 200);
           videoView.setVideoPath(streamURL);
           videoView.setMediaController(mediaController);
       }
       catch (Exception e) {
           Log.e("Error", e.getMessage());
           e.printStackTrace();
       }
 videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
            // Close the progress bar and play the video
            public void onPrepared(MediaPlayer mp) {
                Log.d(TAG,"setOnPreparedListener");
                mediaPlayer = mp;
                int timeDuration = 0;
                boolean videoPlaying = false;
                if(savedInstanceState != null) {
                    timeDuration = savedInstanceState.getInt("timeduration");
                    videoPlaying = savedInstanceState.getBoolean("videoPlaying");
                    Log.d(TAG, "timeDuration saved:" + timeDuration);
                    Log.d(TAG, "videoPlaying saved:" + videoPlaying);


                    if (videoPlaying) {
                        mediaPlayer.seekTo(timeDuration);
                        mediaPlayer.start();
                    } else {
                        mediaPlayer.seekTo(timeDuration);
                    }
                }
                else
                {
                    mediaPlayer.start();
                }
                videoView.start();
                finalTime = mediaPlayer.getDuration();
                Log.d(TAG, "mp.getCurrentPosition():" + mediaPlayer.getCurrentPosition());
                videoSeekBar.setProgress(timeDuration);
                videoSeekBar.setMax(finalTime);
               durationHandler.postDelayed(updateSeekBarTime,1000);
            }
        });
Runnable updateSeekBarTime = new Runnable() {
        public void run() {

            //get current position
            int timeElapsed = mediaPlayer.getCurrentPosition(); //**is crashing here after orientation change**
            //set seekbar progress
            videoSeekBar.setProgress((int) timeElapsed);
            Log.d(TAG,"timeElapsed:"+timeElapsed);
            //repeat yourself that again in 100 miliseconds
            durationHandler.postDelayed(this,1000);
        }
    };

我怎样才能避免这个问题?我如何从用户在纵向模式下停止的相同位置在横向模式下再次启动视频?谢谢。

建议您编写一个扩展MediaPlayer的单例类,然后编写您希望用于媒体播放暂停恢复等的方法。现在,您可以在旋转屏幕之前为该单例类保存呼叫暂停,然后在旋转屏幕时恢复播放机

暂停

恢复


在这里查看答案:您可以使用服务播放音频。所以,若设备旋转,你们既不会失去音轨,也不会停止。我不使用服务。。。。我正在播放视频,这是服务器上的视频流,这只是一个帮助你的想法。祝你好运mediaplayer中没有这样的恢复方法,这种方法能做什么?
Mediaplayer.pause();
media_length=Mediaplayer.getCurrentPosition();
Mediaplayer.seekTo(length);
Mediaplayer.start();