Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在方向更改中保留mediaplayer对象_Android_Android Layout - Fatal编程技术网

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

Android 如何在方向更改中保留mediaplayer对象,android,android-layout,Android,Android Layout,我想在方向从纵向模式更改为横向模式时保存媒体播放器对象。 正如我所知,当您更改方向时,您的活动将被重新创建,因此我的旧媒体播放器对象将被分发。我尝试了保留配置实例方法,但它对我无效 我想在横向视图中的旧媒体播放器对象显示felixpalmer android visualizer。要显示Visualiser,您需要将媒体播放器对象链接到Visualiser视图。 有没有其他方法可以将旧的media player对象传递到横向视图,反之亦然???试试这个 将此代码添加到您的manifest.xml

我想在方向从纵向模式更改为横向模式时保存媒体播放器对象。 正如我所知,当您更改方向时,您的活动将被重新创建,因此我的旧媒体播放器对象将被分发。我尝试了保留配置实例方法,但它对我无效

我想在横向视图中的旧媒体播放器对象显示felixpalmer android visualizer。要显示Visualiser,您需要将媒体播放器对象链接到Visualiser视图。 有没有其他方法可以将旧的media player对象传递到横向视图,反之亦然???

试试这个

将此代码添加到您的
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()的例子吗