Search code examples
androidbuttonaudioclickmedia-player

My Quit Button is not playing the sound when i click it, except this all the button are playing sound. Can anyone solve this problem?


// This is my app exit button it destroys the activity and exits the user from an app. I want to //play a sound when I click this button but unfortunately, the sound is not playing and the activity //destroys. Please help me in solving this issue. Except for this button, all my button sound is working.

// This is my second activity, in this activity, I have used a button for quitting the app but I also //want the button to play a sound when the button is clicked by user. But it is not playing the sound and //quits the app which destroys activity. please tell me how to play the sound on my exit button during //the click

      mExitApp = (Button)findViewById(R.id.exit_app);

           final MediaPlayer mp = MediaPlayer.create(this, R.raw.sample2);

            mExitApp.setOnClickListener(new View.OnClickListener() {

                @Override

                public void onClick(View v) {

                    mp.start();
    
                    ScoreActivity.this.finish();

                    System.exit(0);
    
                }
            });

Solution

  • A quick and dirty way would be to wait for the sound to end playing before finishing the activity/process.

        public void onClick(View v) {
                        mp.start();
                        final Handler handler = new Handler(Looper.getMainLooper());
                        handler.postDelayed(new Runnable() {
                        @Override
                        public void run() {
                            ScoreActivity.this.finish();
                            System.exit(0);
                          }
                        }, 300);
                    }
    

    A more cleaner solution would probably involve a MediaPlayer.OnCompletionListener.

    mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
        public void onCompletion(MediaPlayer mp) {
            finish(); // finish current activity
        }
    });
    

    Or you could play the sound in a foreground/background service. But then you shouldn't kill the entire process (System.exit(0)) like you do now ofc.