Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Stop or release MediaPlayer while it is still preparing

Is it a bug or is it not possible to release, stop or kill MediaPlayer while it's preparing?

I have an instance of MediaPlayer running in Service, it stops fine if I stop, release, set it to null, while MediaPlayer is in prepared state. But it doesn't if I stop, release, set it to null if it's in preparing state.

onPrepared() is called after stop, release, setting to null. Some workaround for this?

I think it's common use case when a user wants to stop MediaPlayer before it has finished preparing.

like image 466
Martin Vandzura Avatar asked May 14 '13 13:05

Martin Vandzura


2 Answers

Another solution could be to implement the OnBufferingUpdateListener and override its method like this:

@Override
public void onBufferingUpdate(MediaPlayer mp, int percent) {
    if (cancel) {
        mp.release();
        mMediaPlayer = null;

    }
}
like image 129
jelmood jasser Avatar answered Nov 15 '22 04:11

jelmood jasser


By looking at the MediaPlayer documentation, you're not allowed to call stop() on an uninitialized object; which makes sense because you can't stop what is not running/ready yet.

On the other hand, release() seems to do the trick after looking at the source code of MediaPlayer.

But it doesn't harm to add a boolean flag to indicate that there is no need for the MediaPlayer object anymore and use that flag to release your object if onPrepared() gets called.

A pseudocode would look like this:

public void cancel(){
 mCancel = true;
}

public void onPrepared(MediaPlayer player){
  if(mCancel){
   player.release();
   //nullify your MediaPlayer reference
   mediaPlayer = null
  }
}
like image 15
Mr.Me Avatar answered Nov 15 '22 06:11

Mr.Me