Knacks
Knacks

Reputation: 37

How to release MediaPlayer for sound after a buttonClick

i am a really newbi. So probably is my question very simple for you. I have a button and wanted to make a Sound after clicking on that button. That works. But I have more activities. And After a time I get a MediaPlayer (-19,0) error, which means that I have to release the mediaplayer. But I don't know how to release it. Could you help me please. Thats my code for the button click:

final MediaPlayer mpButtonKlick = MediaPlayer.create(this, R.raw.sound);

        btn = (Button)findViewById(R.id.button1); 
        btn.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) { 
                // TODO Auto-generated method stub
                mpButtonKlick.start();

            }
        });

Upvotes: 0

Views: 108

Answers (2)

code monkey
code monkey

Reputation: 2124

Initialize the resources in onResume and release it in onPause:

MediaPlayer mpButtonKlick;

@Override
protected void onCreate(final Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // ....
    btn = (Button)findViewById(R.id.button1); 
    btn.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) { 
            // TODO Auto-generated method stub
            mpButtonKlick.start();

        }
    });
    // ...
}

@Override
protected void onResume() {
    super.onResume();
    mpButtonKlick = MediaPlayer.create(this, R.raw.sound);
}

@Override
protected void onPause() {
    super.onPause();
    mpButtonKlick.release();
    mpButtonKlick = null;
}

Upvotes: 1

Hemz
Hemz

Reputation: 223

Update your code as following

 final MediaPlayer mpButtonKlick = MediaPlayer.create(this, R.raw.sound);

            btn = (Button)findViewById(R.id.button1); 
            btn.setOnClickListener(new View.OnClickListener() {
@Override
        public void onClick(View v) {
        if(mpButtonKlick.isPlaying())
        {  
            mpButtonKlick.stop();
            mpButtonKlick.reset();
        } 
        try {

            AssetFileDescriptor afd;
            afd = getAssets().openFd("AudioFile.mp3");
            mpButtonKlick.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength());
            mpButtonKlick.prepare();
            mpButtonKlick.start();
        } catch (IllegalStateException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
   }
});
  }
            });

Upvotes: 1

Related Questions