Y. Glik
Y. Glik

Reputation: 21

Android Media player onClick issue

I'm using MediaPlayer for playing sounds onClick. Until the sound is finished the click event is not play the sound again. How can it play the sound again on click, when the sound is currently playing?

final MediaPlayer mistake = MediaPlayer.create(getActivity(), R.raw.mistake);

tv_mistake.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        mistake.start();
    }
});

Upvotes: 2

Views: 692

Answers (2)

global_warming
global_warming

Reputation: 843

Most of the errors in MediaPlayer comes due to improper handling of different states of its object.

You should release MediaPlayer object after completing playback or before calling start() again.

It is also recommended that once a MediaPlayer object is no longer being used, call release() immediately so that resources used by the internal player engine associated with the MediaPlayer object can be released immediately.

Create a MediaPlayer object as:

Mediaplayer mediaPlayer = null;

And call playMistakeSound() on button click:

tv_mistake.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        playMistakeSound()
    }
});

Implement playMistakeSound() as:

void playMistakeSound() {
    try {
        // releases MediaPlayer object before calling create() again while previous is still playing
        if (mediaPlayer != null){
            mediaPlayer.reset();
            mediaPlayer.release();
            mediaPlayer = null;
        }
        mediaPlayer = MediaPlayer.create(getActivity() /*Context*/, R.raw.mistake);
        // this will release MediaPlayer as soon as it completes
        mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
            @Override
            public void onCompletion(MediaPlayer mp) {
                if (mp != null) {
                    mp.reset();
                    mp.release();
                    mediaPlayer = null;
                }
            }
        });
        mediaPlayer.start();
    } catch (Exception e) {
        // log exception and handle
        e.printStackTrace();
    }
}

Upvotes: 1

udit7395
udit7395

Reputation: 626

You must create a new MediaPlayer object to play the sound again like so.

tv_mistake.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        if (mistake != null) {
            mistake.release();
            mistake = MediaPlayer.create(getActivity(), R.raw.mistake);
        }
        mistake.start();
    }
});

You can read more about MediaPlayer in the following links.

Also a quite similar question

MediaPlayer, MediaPlayer Tutorial, MediaPlayer Tutorial From Google

Upvotes: 1

Related Questions