Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.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 Activity_Screen Orientation_Android Mediaplayer - Fatal编程技术网

Android:在活动屏幕方向更新期间保持MediaPlayer运行

Android:在活动屏幕方向更新期间保持MediaPlayer运行,android,android-activity,screen-orientation,android-mediaplayer,Android,Android Activity,Screen Orientation,Android Mediaplayer,我用媒体播放器播放MP3。当前,我使用禁用了屏幕方向更改 android:screenOrientation="portrait" android:configChanges="keyboardHidden|orientation" 在舱单上。我现在确实想支持横向模式-即删除那些标签-但在销毁/创建周期中,播放器会停止,然后重新启动。这没关系,我甚至在onPause()中手动执行此操作,以便在活动进入后台时停止播放机 为了让它在方向更改期间保持运行,我尝试将其设置为静态(并使用应用程序上下文创

我用媒体播放器播放MP3。当前,我使用禁用了屏幕方向更改

android:screenOrientation="portrait"
android:configChanges="keyboardHidden|orientation"
在舱单上。我现在确实想支持横向模式-即删除那些标签-但在销毁/创建周期中,播放器会停止,然后重新启动。这没关系,我甚至在
onPause()
中手动执行此操作,以便在活动进入后台时停止播放机

为了让它在方向更改期间保持运行,我尝试将其设置为静态(并使用应用程序上下文创建一次)。当然,当我现在移除
onPause()
中的
player.stop()
时,它会做我想做的事情,直到活动进入后台

因此,有两个问题:

  • 如何确定调用
    onStop()
  • 或者:如何在该周期内保持
    MediaPlayer
    运行,但在应用程序进入后台时停止它

您是否考虑过使用回调来处理某些逻辑?

关于如何可靠地确定您的活动是否因配置更改而被破坏的问题,请参见我的回答:


这样,第二个问题的答案应该很简单。

尝试在不同的线程中运行
MediaPlayer


您可以向该线程添加一个更复杂的API,如果您使用的是片段(并且您应该:p),则可以从
onCreate
/
onStop
/
on*
调用该API,然后在片段onCreate()中调用
setRetainInstance(true)
呼叫将使此问题完全消失。

请查看以下答案:

这是我为此目的创建的POC。厌倦了为不同的项目反复解决这个问题。我希望有帮助


我真的建议从google guys切换到第三方播放器,如ExoPlayer:

由于清单中删除了
android:configChanges
,因此不会调用它。如果您想区分何时更改配置和何时实际停止,除了使用onConfigurationChanged()之外,我不知道还有什么其他方法。我猜这意味着您必须在清单中保留
android:configChanges=“orientation”
:\Ouch。仅仅是再加一次就已经做到了;似乎默认实现确实处理了布局更改。万分感谢!:)@Kurtis您不能可靠地确定配置更改不是真的;请看我的答案。我正在使用ExoPlayer,但我将如何处理此问题?@Erum您必须在活动中使用标志
android:configChanges=“screenSize | orientation”
。@Gasper de Elias我已经这样做了,但在我更改方向后,我的布局还存在一些其他问题,我没有进行编程调整?