如何在方向更改中保留mediaplayer对象

时间:2013-02-05 13:55:08

标签: android android-layout

当方向从纵向模式更改为横向模式时,我想保存媒体播放器对象。 据我所知,当你改变你的方向时,你的活动会被重新创建,这就是为什么我的旧媒体播放器对象被破坏了。我尝试了onretainNonConfigureInstance方法,但它对我不起作用。

我希望横向视图中的旧媒体播放器对象能够显示felixpalmer android-visualizer。要显示Visualiser,您需要将媒体播放器对象与可视化视图链接。 有没有其他方法可以将旧的媒体播放器对象传递给横向视图,反之亦然?

4 个答案:

答案 0 :(得分:0)

试试这个,

manifest.xml中添加此代码。它将清除您的问题

  android:configChanges="keyboardHidden|orientation"

答案 1 :(得分:0)

也许您可以将媒体播放器对象保留在活动内部的静态变量中,以便在方向更改时保留它。

即使我从未使用 Android Visualizer 组件,检查其VisualizerView类的源代码,我发现它使用了Android的Visualizer类。

正如您在setCaptureSize方法的文档中所看到的,在Visualizer启用时无法调用它。

这是我尝试为您的使用模式做的事情:

选项1

当屏幕方向发生变化时,请调用VisualizerView类的release()方法,因为这样也会调用Android Visualizer对象的release()方法,从而释放所有资源并允许您通过调用VisualizerView对象上的link()创建一个新的,以再次链接您的媒体播放器。

选项2

查看this问题及其answer。您可以尝试修改VisualizerView类的源代码,并在创建新mVisualizer.setEnabled(false)实例之后和{{1}之前立即在link()方法中插入Visualizer调用。

答案 2 :(得分:0)

实现此目的的一种方法是实施OnRetainNonRetainNonConfigurationInstance()并返回MediaPlayer的实例。然后,在onCreate()onStart()期间,调用getLastNonConfigurationInstance()并将其结果投射到您的MediaPlayer变量。

但是,不推荐使用此方法,并且根据当前文档,您应该将逻辑块封装在Fragment中并使用方法mFragment.setRetainInstance(true),以便不会使用方法重新创建片段它的父母活动。

第三种选择是使用Service封装MediaPlayer。它不会随活动重新创建,也不会停止播放,因为它独立于当前活动。

答案 3 :(得分:0)

您可以将托管媒体播放器的片段的retainInstance属性设置为true。 您需要做的就是将以下行添加到片段onCreate方法: setRetainInstance(真);