问题
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