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

时间:2011-11-04 19:15:13

标签: android android-activity screen-orientation android-mediaplayer

我使用MediaPlayer播放MP3。目前,我使用

禁用了屏幕方向更改
android:screenOrientation="portrait"
android:configChanges="keyboardHidden|orientation"
清单中的

。我现在想要支持横向模式 - 即删除那些标签 - 但是存在的问题是在销毁/创建周期期间玩家停止然后重新启动。这是可以的,我甚至可以在onPause()中手动执行此操作,以便在活动进入后台时停止播放器。

为了让它在方向更改期间保持运行,我尝试将其设置为静态(并使用应用程序上下文创建一次)。当然,当我现在删除player.stop()中的onPause()时,它会按照我想要的方式执行操作 - 好吧,直到活动在后台运行。

所以,有两个问题:

  • 如何确定在调用onStop()
  • 后是否直接重新创建活动
  • 或者:如何在该周期内保持MediaPlayer运行,但在应用程序进入后台时停止运行?

5 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

关于如何可靠地确定您的活动是否因配置更改而被销毁的问题,请参阅我的回答:How to save/restore(update) ref to the dialog during screen rotation?(I need ref in onCreate method of activity.)

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

答案 2 :(得分:1)

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

您可以在此线程中添加一个更复杂的API,您可以从onCreate / onStop / on*

调用该API

答案 3 :(得分:1)

如果您正在使用片段(并且您应该:P),那么在片段onCreate()调用中调用setRetainInstance(true)将使这个问题彻底消失。

答案 4 :(得分:0)

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

这是我为此目的而创建的POC。厌倦了为不同的项目一遍又一遍地解决这个问题。我希望它有所帮助。

我真的建议从谷歌人切换到像ExoPlayer这样的第三方播放器:https://github.com/google/ExoPlayer