更改屏幕方向时视频不会同时播放

Posted

技术标签:

【中文标题】更改屏幕方向时视频不会同时播放【英文标题】:Video don't play from same time when change screen orientation 【发布时间】:2012-09-22 17:36:49 【问题描述】:

我非常喜欢这个网站,因为我可以找到许多有用的解决方案,对我很有帮助,尤其是我是 android 编程的初学者,这是我的第一个问题,所以我希望能从这个伟大的社区中得到帮助。

问题: 我在我的应用程序中播放视频,并在用户定向屏幕时使其以横向全屏播放,所以我想通过使用 seekTo() 和 getCurrentPosition() 让视频从同一点重新开始播放 - 但是视频播放几秒钟后的问题我的意思是视频在同一时间点搜索的位置,但是当开始播放时它会增加很多秒。

我的代码:

    //initialise everything  
protected void onCreate(Bundle savedInstanceState) 
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        v = (VideoView) findViewById(R.id.videoView1);
                v.setVideoPath(dir + videoName + ".3gp");
                v.setMediaController(new MediaController(this));
                if (savedInstanceState == null)
                    v.start();  
                
                else 
                    playingTime = savedInstanceState.getInt("restartTime", 0);
                    v.seekTo(playingTime);
                
       

@Override
protected void onSaveInstanceState(Bundle outState) 
    // TODO Auto-generated method stub
    super.onSaveInstanceState(outState);
    if (file.exists())
        playingTime = v.getCurrentPosition();
        v.stopPlayback();
        outState.putInt("restartTime", playingTime);
    

我尝试了很多这样的解决方案 How to keep playing video while changing to landscape mode android

我正在使用 Galaxy Nexus 测试我的应用程序。如果有任何提示,我将不胜感激。 对不起我的英语不好,非常感谢。

【问题讨论】:

【参考方案1】:

在您的活动中,保持一切正常。它归结为在重新创建活动时保存位置。这是一种方法:

@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    //initialise everything


    //finally
    if(savedInstanceState!=null) 
        int seekValue = savedInstanceState.getInt("where");
        //now seekTo(seekValue)
    

@Override
    protected void onSaveInstanceState(Bundle outState) 
        int seekValue; //set this to the current position;
        outState.putInt("where", seekValue);
        super.onSaveInstanceState(outState);
    

【讨论】:

您不会在您的Activity onSaveInstanceState(...) 方法中最后调用super.onSaveInstanceState(outState) 吗?换句话说,在调用outState.PutInt(...)之后。 @Squonk 从语义的角度来看是有意义的,但实际上并不重要,因为您将数据放在同一个 outState 实例中,而 super 实现不需要具有最终状态outState 还没有。但我也更愿意把它放在第一位,因为它独立于超级实现。尽管有人可能会争辩说 super 可能需要先设置 outState 才能将内容放入其中,但在这种情况下,将数据放在 super 之后会更安全。 好吧,我更喜欢在最后调用 super 而不是覆盖您的“活动”状态。但是,我写这个只是为了演示;无论如何移动它。 @zapl :好的同意 - 它基本上只是一个语义点。查看Activity 的源代码后,似乎这两种方式都不会产生影响。我想我只是在我自己的代码中最后调用super 实现,因为它使“流程”对我来说看起来更合乎逻辑。 @SherifelKhatib 非常感谢 Sherif 先生,但我确实做到了.. 请检查我上面的代码。

以上是关于更改屏幕方向时视频不会同时播放的主要内容,如果未能解决你的问题,请参考以下文章

如何在屏幕方向更改时附加片段?

Android 设定横屏,禁止屏幕旋转,Activity重置 [更新视频播放器相关]

UICollectionView invalidateLayout 不会在屏幕方向更改时触发 sizeForItem

屏幕方向更改后继续活动 - Android

需要帮助修复某些 UIViewControllers 的方向

如何使用 espresso 更改应用程序屏幕方向