当方向从纵向模式更改为横向模式时,我想保存媒体播放器对象。 据我所知,当你改变你的方向时,你的活动会被重新创建,这就是为什么我的旧媒体播放器对象被破坏了。我尝试了onretainNonConfigureInstance方法,但它对我不起作用。
我希望横向视图中的旧媒体播放器对象能够显示felixpalmer android-visualizer。要显示Visualiser,您需要将媒体播放器对象与可视化视图链接。 有没有其他方法可以将旧的媒体播放器对象传递给横向视图,反之亦然?
答案 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(真);