当方向从纵向模式变为横向模式时,我想保存媒体播放器对象。据我所知,当您更改方向时,您的活动会重新创建,这就是为什么我的旧媒体播放器对象被破坏的原因。我尝试了 onretainNonConfigureInstance 方法,但它对我不起作用。
我希望横向视图中的旧媒体播放器对象显示 felixpalmer android-visualizer。要显示可视化器,您需要将媒体播放器对象与可视化器视图链接。有没有其他方法可以将旧媒体播放器对象传递给横向视图,反之亦然?
当方向从纵向模式变为横向模式时,我想保存媒体播放器对象。据我所知,当您更改方向时,您的活动会重新创建,这就是为什么我的旧媒体播放器对象被破坏的原因。我尝试了 onretainNonConfigureInstance 方法,但它对我不起作用。
我希望横向视图中的旧媒体播放器对象显示 felixpalmer android-visualizer。要显示可视化器,您需要将媒体播放器对象与可视化器视图链接。有没有其他方法可以将旧媒体播放器对象传递给横向视图,反之亦然?
试试这个,
在您的 .it 中添加此代码manifest.xml
将清除您的问题
android:configChanges="keyboardHidden|orientation"
也许您可以将媒体播放器对象保存在活动内的静态变量中,以便在方向更改时保留它。
即使我从未使用过Android Visualizer组件,但检查其VisualizerView
类的源代码,我发现它使用了 Android 的Visualizer
类。
正如您在该方法的文档中看到的那样,在启用setCaptureSize
时无法调用它。Visualizer
这就是我会尝试为您的使用模式做的事情:
选项1
当屏幕方向改变时调用该类的release()
方法,VisualizerView
因为这也会调用release()
Android 对象的方法,从而释放所有资源并允许您通过调用该对象Visualizer
来创建一个新资源以再次链接您的媒体播放器。link()
VisualizerView
选项 2
看看这个问题及其答案。您可以尝试修改类的源代码,并在创建新实例之后和调用之前立即VisualizerView
插入方法中。mVisualizer.setEnabled(false)
link()
Visualizer
setCaptureSize
一种方法是实现OnRetainNonRetainNonConfigurationInstance()
并返回您的MediaPlayer
. 然后,在onCreate()
or期间onStart()
,调用getLastNonConfigurationInstance()
并将其结果转换为您的 MediaPlayer 变量。
但是,此方法已弃用,根据当前文档,您应该将逻辑块封装在 a 中Fragment
并使用 method mFragment.setRetainInstance(true)
,这样片段就不会与其父活动一起重新创建。
第三种选择是使用 aService
来封装MediaPlayer
. 它不会与活动一起重新创建,它不会停止播放,因为它独立于当前活动。
您可以将承载媒体播放器的片段的 retainInstance 属性设置为 true。您需要做的就是将以下行添加到片段的 onCreate 方法中: setRetainInstance(true);