Hi Martin,
I am not sure if this is the problem, but you should not keep instances to the old activity during configuration change at all (MediaPlayer is created with a Context); think about initializing and managing the MediaPlayer in your Application class or a background service, if you want it to survive configuration changes. Have fun On Feb 16, 1:24 pm, Martin Nilsson <[email protected]> wrote: > It seems that my media player object is somehow destroyed when I use > onRetainNonConfigurationInstance. I when I catch the object in > "createMediaPlayer" below I can verify that mp != null. But when I try > to get the current position with mp.getCurrentPosition() I get an > exception and the activity shuts down. I can see the following in the > log: > > 02-16 10:45:55.869: DEBUG/StreamingPlayer(1854): restoreMediaPlayer > 02-16 10:45:55.879: DEBUG/AndroidRuntime(1854): Shutting down VM > 02-16 10:45:55.879: WARN/dalvikvm(1854): threadid=3: thread exiting > with uncaught exception (group=0x4000fe70) > 02-16 10:45:55.889: ERROR/AndroidRuntime(1854): Uncaught handler: > thread main exiting due to uncaught exception > 02-16 10:45:55.919: ERROR/AndroidRuntime(1854): > java.lang.RuntimeException: Unable to start activity > ComponentInfo{com.stericsson.streamingplayer/ > com.stericsson.streamingplayer.StreamingPlayer}: > java.lang.IllegalStateException > 02-16 10:45:55.919: ERROR/AndroidRuntime(1854): at > android.app.ActivityThread.performLaunchActivity(ActivityThread.java: > 2268) > 02-16 10:45:55.919: ERROR/AndroidRuntime(1854): at > android.app.ActivityThread.handleLaunchActivity(ActivityThread.java: > 2284) > 02-16 10:45:55.919: ERROR/AndroidRuntime(1854): at > android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java: > 3278) > 02-16 10:45:55.919: ERROR/AndroidRuntime(1854): at > android.app.ActivityThread.access$1900(ActivityThread.java:112) > 02-16 10:45:55.919: ERROR/AndroidRuntime(1854): at > android.app.ActivityThread$H.handleMessage(ActivityThread.java:1696) > 02-16 10:45:55.919: ERROR/AndroidRuntime(1854): at > android.os.Handler.dispatchMessage(Handler.java:99) > 02-16 10:45:55.919: ERROR/AndroidRuntime(1854): at > android.os.Looper.loop(Looper.java:123) > 02-16 10:45:55.919: ERROR/AndroidRuntime(1854): at > android.app.ActivityThread.main(ActivityThread.java:3948) > 02-16 10:45:55.919: ERROR/AndroidRuntime(1854): at > java.lang.reflect.Method.invokeNative(Native Method) > 02-16 10:45:55.919: ERROR/AndroidRuntime(1854): at > java.lang.reflect.Method.invoke(Method.java:521) > 02-16 10:45:55.919: ERROR/AndroidRuntime(1854): at > com.android.internal.os.ZygoteInit > $MethodAndArgsCaller.run(ZygoteInit.java:782) > 02-16 10:45:55.919: ERROR/AndroidRuntime(1854): at > com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540) > 02-16 10:45:55.919: ERROR/AndroidRuntime(1854): at > dalvik.system.NativeStart.main(Native Method) > 02-16 10:45:55.919: ERROR/AndroidRuntime(1854): Caused by: > java.lang.IllegalStateException > 02-16 10:45:55.919: ERROR/AndroidRuntime(1854): at > android.media.MediaPlayer.getCurrentPosition(Native Method) > 02-16 10:45:55.919: ERROR/AndroidRuntime(1854): at > com.stericsson.streamingplayer.StreamingPlayer.restoreMedidaPlayer(StreamingPlayer.java: > 233) > 02-16 10:45:55.919: ERROR/AndroidRuntime(1854): at > com.stericsson.streamingplayer.StreamingPlayer.createMediaPlayer(StreamingPlayer.java: > 155) > 02-16 10:45:55.919: ERROR/AndroidRuntime(1854): at > com.stericsson.streamingplayer.StreamingPlayer.onCreate(StreamingPlayer.java: > 94) > 02-16 10:45:55.919: ERROR/AndroidRuntime(1854): at > android.app.Instrumentation.callActivityOnCreate(Instrumentation.java: > 1123) > 02-16 10:45:55.919: ERROR/AndroidRuntime(1854): at > android.app.ActivityThread.performLaunchActivity(ActivityThread.java: > 2231) > 02-16 10:45:55.919: ERROR/AndroidRuntime(1854): ... 12 more > > The code which gives the print " restoreMediaPlayer" is located in > function "createMediaPlayer" which I provided in my previous post. > > Why can't I pass trough the media player object when I can send > variables just fine? Could it be that I need to create a new thread? > When I start the media player the first time it looks like this in the > code: > > Runnable r = new Runnable() { > public void run() { > setDataSource(path); > prepare(); > start(); > } > }; > new Thread(r).start(); > > But I wasn't able to reuse the code after orientation change, I still > had my activity crashing. > > Regards > > Martin > > On 15 Feb, 13:46, Martin Nilsson <[email protected]> wrote: > > > Hello, > > > I am trying to keep a video playback going after a orientation change > > but keep getting a crash when trying to pass the media player trough > > onRetainNonConfigurationInstance. > > > I can pass the time, setup the media player from scratch and do a fast > > forward but I would not like to do the setup more than once. > > > My code looks like: > > > @Override > > public Object onRetainNonConfigurationInstance() { > > return( mp ); > > } > > > public void onCreate(Bundle icicle) { > > ... > > createMediaPlayer(); > > > } > > > public void createMediaPlayer() { > > ... > > if (getLastNonConfigurationInstance()!=null) { > > mp = (MediaPlayer)getLastNonConfigurationInstance() ; > > } else { > > mp = new MediaPlayer(); > > ... > > } > > > } > > > Can anyone help me pinpoint why this does not work? > > -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/android-developers?hl=en

