Я пытаюсь сделать потоковое видео, которое прекрасно работает в портретном режиме. Затем я добавил код для onConfigurationChange
, чтобы раздуть еще один макет для ландшафтного режима. но мое приложение становится разбился на этой линии:Объект MediaPlayer, получивший Null после изменения ориентации?
int timeElapsed = mediaPlayer.getCurrentPosition();
Здесь я получаю mediaPlayer
в нуль в то время как он был уже инициализирован.
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);
}
};
Как я могу избежать этой проблемы? И как я могу снова начать видео в ландшафте с той же позиции, где пользователь остановился в портретном режиме? Благодарю.
Отъезд ответ здесь: http://stackoverflow.com/questions/10046369/losing-mediaplayer-other-variables -when-device-is-rotated Вы можете использовать Службу для воспроизведения аудио. Поэтому, если устройство повернуто, вы не потеряете трек аудио, и он не будет остановлен. – NightFury
Я не пользуюсь сервисом .... Я играю видео, и это потоковое видео с сервера – Erum
Просто идея помочь вам. http://jtdowdall.blogspot.com/2014/03/maintain-video-playback-during.html Удачи! – NightFury