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

我使用MediaPlayer播放MP3。 目前我通过使用禁用屏幕方向更改

android:screenOrientation="portrait" android:configChanges="keyboardHidden|orientation" 

在清单中。 我现在想要支持横向模式 – 即移除这些标签 – 但是有问题,在销毁/创build循环期间,播放器被停止然后重新启动。 这是可以的,我甚至在onPause()手动执行这个操作来在活动进入后台时停止播放器。

为了在方向变化时保持运行,我尝试将其设置为静态(并使用应用程序上下文创build一次)。 当然,当我现在删除了onPause()中的player.stop()时,它就是我想要的 – 直到 Activity在后台运行。

所以,有两个问题:

  • 如何确定在调用onStop()之后是否直接重新创buildActivity
  • 或者:如何让MediaPlayer在该周期内保持运行,而当应用程序在后台运行时停止运行?

Solutions Collecting From Web of "Android:在活动屏幕方向更新期间保持MediaPlayer运行"

你有没有看过使用onConfigurationChanged()callback来处理这些逻辑?

关于你的问题你如何可以可靠地确定你的活动是否由于configuration更改而被破坏,请参阅我的答案: 在屏幕旋转期间如何保存/恢复(更新)引用对话框(我需要参考onCreate方法的活动。 )

有了这个,你的第二个问题的答案应该很容易。

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

你可以添加到这个线程一个更复杂的API,你可以从onCreate / onStop / on*

如果你正在使用片段(你应该:P),然后在你的片段onCreate()调用里面调用setRetainInstance(true)将会使这个问题彻底消失。

请参阅以下答案: https : //stackoverflow.com/a/31466602/994021

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

我真的build议切换到像谷歌球员的ExoPlayer第三方球员: https : //github.com/google/ExoPlayer