Android 如何在方向更改中保留mediaplayer对象
我想在方向从纵向模式更改为横向模式时保存媒体播放器对象。 正如我所知,当您更改方向时,您的活动将被重新创建,因此我的旧媒体播放器对象将被分发。我尝试了保留配置实例方法,但它对我无效 我想在横向视图中的旧媒体播放器对象显示felixpalmer android visualizer。要显示Visualiser,您需要将媒体播放器对象链接到Visualiser视图。 有没有其他方法可以将旧的media player对象传递到横向视图,反之亦然???试试这个 将此代码添加到您的Android 如何在方向更改中保留mediaplayer对象,android,android-layout,Android,Android Layout,我想在方向从纵向模式更改为横向模式时保存媒体播放器对象。 正如我所知,当您更改方向时,您的活动将被重新创建,因此我的旧媒体播放器对象将被分发。我尝试了保留配置实例方法,但它对我无效 我想在横向视图中的旧媒体播放器对象显示felixpalmer android visualizer。要显示Visualiser,您需要将媒体播放器对象链接到Visualiser视图。 有没有其他方法可以将旧的media player对象传递到横向视图,反之亦然???试试这个 将此代码添加到您的manifest.xml
manifest.xml
中。它将清除您的问题
android:configChanges="keyboardHidden|orientation"
也许您可以将media player对象保存在活动中的一个静态变量中,以便在方向更改时保留它 尽管我从未使用过Android Visualizer组件,但通过检查其类的源代码,我发现它使用的是Android的类 正如您在该方法的文档中所看到的,当启用了
可视化工具时,无法调用该方法
这是我将尝试为您的使用模式所做的:
选项1
当屏幕方向改变时,调用类的release()
方法,因为这也将调用Android的Visualizer
对象的方法,从而释放所有资源,并允许您通过调用对象上的link()
再次链接媒体播放器来创建新的资源
选项2
请看一看问题及其答案。您可以尝试修改类的源代码,并在链接()中插入mVisualizer.setEnabled(false)
方法在创建新的可视化工具
实例之后和调用setCaptureSize
之前执行。一种方法是实现onRetainnonConfiguration instance()
并返回MediaPlayer的实例。然后,在onCreate()
或onStart()
期间,调用getLastNonConfigurationInstance()
并将其结果强制转换到MediaPlayer变量
但是,此方法已被弃用,根据当前文档,您应该将逻辑块封装在片段中
,并使用方法MFFragment.setRetainInstance(true)
,以便不会使用其父活动重新创建片段
第三种选择是使用服务
封装MediaPlayer
。它不会与活动一起重新创建,也不会停止播放,因为它独立于当前活动。您可以将承载媒体播放器的片段的retainInstance属性设置为true。
您只需在fragments onCreate方法中添加以下行:
setRetainInstance(真) 使用清单(活动内部)中的属性onConfigChanges:orientation
,可以防止重新创建。也许这是一个适合您的解决方案。@Thommy如果我在清单中使用configchanges,它将在横向视图中显示PorteTracit xml…它应该显示文件夹“layout land”中的xml但是,当您切换到横向模式时,它会显示默认布局xml…为什么会发生这种情况当您需要覆盖活动中的方法onConfigurationChanged
以手动设置布局时。我会覆盖它,但当我覆盖它时,我的程序将从configurationchanged方法开始。。不是从OnCreate调用setcapturesize()。设置visualiser时出现错误状态。。如何解决此错误如果我在清单中使用configchanges,它将在横向视图中显示PorteTracit xml…它应该显示文件夹“layout land”中的xml,但在切换到横向模式时显示默认布局xml…为什么会发生此情况在错误状态下调用GetCaptureSize()错误..设置visualiser。。如何解决此错误设置visualiser时在错误状态下调用了setcapturesize()。。如何解决这个问题error@swapniladsure我已经编辑了我的答案,为您提供了两个不同的选项来尝试解决setCaptureSize()
错误。尝试看看这是否有帮助。当我尝试在横向模式下链接visualiser和mediaplayer实例时,我遇到了“在错误状态下调用setCaptureSize()的错误”。但如果我创建了新的mediaplayer对象,并调用了visualiser。link(player对象)方法效果良好,但问题是我必须创建新的media player对象。。所以现在我将尝试使用片段的解决方案。在片段中,我可以在单个视图上使用portrate和横向片段吗??你有我在应用程序中使用的setretainInstance和getlastNonConfigurationInstance()的例子吗