繁体   English   中英

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

[英]Android: Keep MediaPlayer running during Activity screen orientation update

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

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

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

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

那么,有两个问题:

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

你有没有看过使用onConfigurationChanged()回调来处理这个逻辑?

关于你的问题如何可靠地确定你的Activity是否因配置更改而被销毁,请参阅我的答案: 如何在屏幕旋转期间保存/恢复(更新)ref对话框?(我需要参考onCreate方法的活动。 )

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM