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.
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;
}
}
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
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With