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?
Have you looked at using the onConfigurationChanged() callback to handle some of this logic?
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.
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*
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.
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