I was just wondering if you could try to use setDataSource again before
making a call to prepareAsync.. not sure if that is the problem as i have
not seen the complete code.. but you could try..

Thanks,
Prajakta

On Fri, Sep 17, 2010 at 7:42 PM, Jason <[email protected]> wrote:

> Anyone?.. Bueller...
>
> On Sep 18, 5:20 am, Jason <[email protected]> wrote:
> > Hi all,
> >
> > I'm running into some state problems with MediaPlayer.  I have so far
> > only seen this on one device (HTC Hero) running Android 1.5.  Stack
> > trace is:
> >
> > java.lang.IllegalStateException
> >        at android.media.MediaPlayer.prepareAsync(Native Method)
> >        at
> > com.carboncrystal.ro.audio.SafeMediaPlayer.prepareAsync(Unknown
> > Source)
> >        at com.carboncrystal.ro.audio.a.a(Unknown Source)
> >        at
> > com.carboncrystal.ro.audio.SafeOnCompletionListener.onCompletion(Unknown
> > Source)
> >
> > Now that's all pretty meaningless I know, but here's the relevant
> > code:
> >
> >         public void onCompletion(MediaPlayer mp) {
> >                 mp.stop();
> >                 mp.prepareAsync();
> >         }
> >
> > The "SafeMediaPlayer" referred to above is just my hack to track down
> > where the problem was (it's on a phone used by a friend in another
> > country, so difficult to monitor).
> >
> > So basically the story is this:
> >
> > In an effort to avoid reloading audio every time its used, I am
> > reusing the same MediaPlayer instance over and over.  In most cases, I
> > don't explicitly call "stop()" because most of the sounds are short
> > (sound effects that just wont squeeze into the tiny SoundPool cache)..
> > so I'm using an OnCompletionListener to let me know when the sound has
> > finished so I can prepare it for the next use.
> >
> > Now.. according to the doco:
> >
> > "Calling stop() stops playback and causes a MediaPlayer in the
> > Started, Paused, Prepared or PlaybackCompleted state to enter the
> > Stopped state.
> > Once in the Stopped state, playback cannot be started until prepare()
> > or prepareAsync() are called to set the MediaPlayer object to the
> > Prepared state again."
> >
> > So ok, according to this I should be fine.. but it's a little unclear
> > to me from the state transition diagram (http://developer.android.com/
> > reference/android/media/MediaPlayer.html) whether the MediaPlayer
> > enters the PlaybackCompleted before or after the call is made to
> > onCompletion in the OnCompletionListener.
> >
> > It sort of seems that when onCompletion is called, the MediaPlayer is
> > already in a Stopped state.  But who cares right.. calling stop() in a
> > stopped state should do nothing as it's a valid state.
> >
> > Interestingly I don't always see the failure.. which tells me it may
> > be a timing thing.  In either case, does anyone have any relevant
> > experience with this?
> >
> > Maybe there's a call to start() sneaking in between the call to stop()
> > and the call to prepareAsync() from another thread.. then again, I
> > would have thought this would give me a failure on the call to
> > start().. unless of course it is in a PlaybackCompleted state...
> > urgh.. my head hurts.
> >
> > Thanks.
>
> --
> 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]<android-developers%[email protected]>
> For more options, visit this group at
> http://groups.google.com/group/android-developers?hl=en
>

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

Reply via email to