2

我正在流式播放/播放已下载的视频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不叫。我有一些工作要做,所以我希望它被调用。 我用另一种方法是,使用MediaplayerSurfaceView和它的工作太除了mediaplayer不是在某些情况下(在每个视频的视频大小的变化)

基本上我想有什么正确运作的是,在上面的代码onRestoreInstanceState应在屏幕旋转

+0

它创建另一个对象 –

+0

你必须节省屏幕方向捆 –

+0

保存当前的时间上旋转共享偏好和onCreate方法得到了保存时间,并寻求媒体播放器到那个时候 –

回答

1

找到了解决办法,如果我们增加android:configChanges="screenSize|orientation"到manifest.xml中则仅onConfigurationChanged覆盖被称为被称为视频不应重新初始化(或无延迟播放),活动不会重新创建。因为我有一个VideoView和一个ListView在父母LinearLayout屏幕上,我改变方向从水平从onConfigurationChanged verical。

您必须相应地在纵向或横向模式下动态设置所需视图。