Android: Keep MediaPlayer running during Activity screen orientation update

北城余情 提交于 2019-12-18 04:46:20

问题


I use a MediaPlayer to play an MP3. Currently I disabled screen orientation changes by using

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

in the manifest. I do want to support landscape mode now - i.e. removed those tags - but have the problem that during the destroy/create cycle the player gets stopped and then restarted. This is okay and I actually do this even manually in onPause() to stop the player when the activity goes in the background.

To keep it running during orientation changes now, I tried making it static (and using the Application Context to create it once). Of course, when I remove the player.stop() in onPause() now, it does what I want - well, until the Activity goes in the background.

So, two questions:

  • How can I determine if the Activity will be recreated directly after the call to onStop()
  • Or: How can I keep the MediaPlayer running during that cycle, yet stop it when the App goes in the background?

回答1:


Have you looked at using the onConfigurationChanged() callback to handle some of this logic?




回答2:


Regarding your question how you can reliably determine whether your Activity is destroyed due to a configuration change, see my answer here: How to save/restore(update) ref to the dialog during screen rotation?(I need ref in onCreate method of activity.)

With this, the answer to your second question should be easy.




回答3:


Try running MediaPlayer in different Thread.

You can add to this thread a more complex API to which you can call from onCreate/onStop/on*




回答4:


If you are using fragments (and you should :P), then calling setRetainInstance(true) inside your fragments onCreate() call will make this problem go completely go away.




回答5:


Please see the following answer: https://stackoverflow.com/a/31466602/994021

It is a POC I've created for this purpose. Tired of solving this issue over and over again for different projects. I hope it helps.

I really recommend to switch to a third party player like ExoPlayer from google guys: https://github.com/google/ExoPlayer



来源:https://stackoverflow.com/questions/8014603/android-keep-mediaplayer-running-during-activity-screen-orientation-update

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!