To avoid any confusion, I don't know if I made it clear that the code I have listed is currently working. I'm just not sure of why I am needing the IllegalStateException logic.
Thanks, Jeff On Jun 12, 12:39 am, "Jeff B." <jeffbromber...@gmail.com> wrote: > Hello, > > I have an ImageButton that plays a sound whenever it is held down and > stops as soon as you let up. To do this I register an onTouch handler > and operate on ACTION_DOWN and ACTION_UP MotionEvents. The code is > below. The idea is that when the ACTION_UP comes in I first call > stop() and then I re-prepare the sound so that it is all ready for the > next start() in a subsequent ACTION_DOWN. I do this instead of start/ > pause because I need the sound to start from the beginning each time > and the seekTo() call is asynch which seemed to complicated the > logic. The problem I'm having is that every now and then if I'm > really "beating" on the button (i.e. clicking it rapidly and for > different durations) I will hit the illegal state exception. The > debugger log shows that I am in MEDIA_PLAYER_PLAYBACK_COMPLETE (128) > when trying to call prepare(). As you can see below, I only try to > call prepare after I have called stop. So this would imply that stop > is somehow either asynchronous or the two operations are being allowed > to happen in an overlapped fashion. > > So two questions: 1) does anyone have an explanation for what I'm > seeing? 2) is there a better/cleaner way to do what I'm trying to do > in general? This is my first android app so it's very possible I'm > missing the boat on something. > > public void onCreate(Bundle savedInstanceState) { > > super.onCreate(savedInstanceState); > setContentView(R.layout.main); > > Context appCtx = getApplicationContext(); > > // button init code removed > > mSoundBeep = MediaPlayer.create(appCtx, R.raw.beep); > > mImgBtnBeep.setOnTouchListener(new OnTouchListener() { > public boolean onTouch(View v, MotionEvent event) { > > switch (event.getAction()) { > case MotionEvent.ACTION_DOWN: > mSoundBeep.start(); > break; > > case MotionEvent.ACTION_UP: > if (mSoundBeep.isPlaying()) { > mSoundBeep.stop(); > try { > mSoundBeep.prepare(); > } catch (IllegalStateException e) { > mSoundBeep.release(); > Context appCtx = getApplicationContext(); > mSoundBeep = MediaPlayer.create(appCtx, R.raw.beep); > } catch (IOException e) { > // TODO Auto-generated catch block > e.printStackTrace(); > } > } > break; > } > > return false; > } > > > > });- Hide quoted text - > > - Show quoted text - -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to android-developers@googlegroups.com To unsubscribe from this group, send email to android-developers+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/android-developers?hl=en