Объект MediaPlayer получает значение Null после изменения ориентации?

Я пытаюсь сделать потоковое видео, которое отлично работает в портретном режиме. Затем я добавил код для 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);
        }
    };

Как я могу избежать этой проблемы? И как я могу снова запустить видео в ландшафтном режиме с того же места, где пользователь остановился в портретном режиме? Спасибо.


person Erum    schedule 17.09.2015    source источник
comment
Проверьте ответ здесь: stackoverflow.com/questions/10046369/ Вы можете использовать службу для воспроизведения звука. Таким образом, если устройство повернуто, вы не потеряете дорожку звука и не остановите его.   -  person NightFury    schedule 17.09.2015
comment
я не пользуюсь сервисом.... я играю видео, и это потоковое видео с сервера   -  person Erum    schedule 17.09.2015
comment
Просто идея, чтобы помочь вам. jtdowdall.blogspot.com/2014/03/ Удачи!   -  person NightFury    schedule 17.09.2015


Ответы (1)


Рекомендуется написать одноэлементный класс, который расширяет MediaPlayer, а затем написать методы, которые вы хотите использовать для воспроизведения мультимедиа, приостановки, возобновления и т. д. Теперь вы можете сохранить вызов pause() для этого одноэлементного класса перед поворотом, а когда экран поворачивается, затем возобновить() ваш игрок.

для приостановки

Mediaplayer.pause();
media_length=Mediaplayer.getCurrentPosition();

для возобновления

Mediaplayer.seekTo(length);
Mediaplayer.start();
person Akber    schedule 17.09.2015
comment
нет такого метода для возобновления работы в медиаплеере, что сделает этот метод? - person Erum; 17.09.2015