我正在流式播放/播放已下载的视频VideoView
。当我旋转屏幕时,所有对象都将重新初始化,以便从头开始播放视频,或者如果获取当前位置并在屏幕旋转中设置位置,则会再次播放视频。由于来自后端的视频是经过加密的,所以加载它需要很长时间,导致非常不好的用户体验。 以下是我所知道的。Android媒体播放器在屏幕旋转上重新初始化
public class MainActivity extends AppCompatActivity {
VideoView videoView;
Context context;
int stopPosition = 0;
private static MediaController mediaController;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
context = this;
videoView = (VideoView) findViewById(R.id.videoView1);
if (savedInstanceState != null) {
stopPosition = savedInstanceState.getInt("position");
Log.d("", "savedInstanceState called" + stopPosition);
}
mediaController = new MediaController(context);
mediaController.setAnchorView(videoView);
String path = "android.resource://" + getPackageName() + "/" + R.raw.videotest;
Uri uri = Uri.parse(path);
videoView.setMediaController(mediaController);
videoView.setVideoURI(uri);
videoView.requestFocus();
videoView.start();
}
@Override
public void onPause() {
Log.d("", "onPause called");
super.onPause();
videoView.pause();
}
@Override
protected void onResume() {
super.onResume();
Log.d("", "onResume called" + stopPosition);
videoView.seekTo(stopPosition);
videoView.resume();
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
videoView.pause();
outState.putInt("position", 100);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
stopPosition = savedInstanceState.getInt("position");
}
}
当我用下面的方法这个问题解决,但一些新的一个开始。
如果我添加android:configChanges="screenSize|orientation"
到AndroidManifest.xml
它完美的作品,除了onSaveInstanceState
不叫。我有一些工作要做,所以我希望它被调用。 我用另一种方法是,使用Mediaplayer
和SurfaceView
和它的工作太除了mediaplayer
不是在某些情况下(在每个视频的视频大小的变化)
基本上我想有什么正确运作的是,在上面的代码onRestoreInstanceState
应在屏幕旋转
它创建另一个对象 –
你必须节省屏幕方向捆 –
保存当前的时间上旋转共享偏好和onCreate方法得到了保存时间,并寻求媒体播放器到那个时候 –