5

I have two buttons in my media player that streams a radio station, play and pause. I want to make it only one button that has two function. First click I want to play it and second click I want to pause it. And when I click it again I want to play it. I need help. Here is my code.

 play = (Button) findViewById(R.id.play);
 pause = (Button) findViewById(R.id.pause);


 play.setOnClickListener(new View.OnClickListener() {
 public void onClick(View view) {
 play();
}
});
play.performClick();

pause.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
pause();
}
});


}

private void play() {
Uri myUri = Uri.parse("Shoutcast URL");
try {
if (mp == null) {
this.mp = new MediaPlayer();
} else {
mp.stop();
mp.reset();
}
mp.setDataSource(this, myUri); // Go to Initialized state
mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
mp.setOnPreparedListener(this);
mp.setOnBufferingUpdateListener(this);

mp.setOnErrorListener(this);
mp.prepareAsync();

Log.d(TAG, "LoadClip Done");
} catch (Throwable t) {
Log.d(TAG, t.toString());
}
}

@Override
public void onPrepared(MediaPlayer mp) {
Log.d(TAG, "Stream is prepared");
mp.start();
}

private void pause() {
mp.pause();
}



@Override
public void onDestroy() {
super.onDestroy();
stop();

}

public void onCompletion(MediaPlayer mp) {
stop();
}
Jonas
  • 121,568
  • 97
  • 310
  • 388
jajaja
  • 389
  • 1
  • 12
  • 26

4 Answers4

10

Create just one Button and add something like a buttonstatus. Then you can check the status in your listener.
For example:

boolean isPlaying = false;
playPause = (Button) findViewById(R.id.play);


 playPause.setOnClickListener(new View.OnClickListener() {
   public void onClick(View view) {
   if (isPlaying) {
     pause();
   }else{
     play();
   }
   isPlaying = !isPlaying;
}
});
Obl Tobl
  • 5,604
  • 8
  • 41
  • 65
0
Boolean b = false;
Button play = (Button) findViewById(R.id.play);
play..setOnClickListener(new View.OnClickListener() {

            public void onClick(View arg0) {
    if(b == false)
  {
         //write play code here
       b= true;
  }
  else
  {
     // enter pause code here
   }

   }
}
Amsheer
  • 7,046
  • 8
  • 47
  • 81
  • it says change modifier of b into final, then when i put final boolean, it says it cannot be defined since its in enclosing type. – jajaja Aug 08 '13 at 07:41
0

You can use Toggle button:

toggleButton.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
    if (toggleButton.isChecked()) {
       play();
    } else {
        pause();
    }
}
});

You can also remove the green bar from toggle button.

Toggle button Mkyong example

Android dev tutorial

MSA
  • 2,502
  • 2
  • 22
  • 35
0

You don't need to declare any boolean variable to check player state. There is a method already available in mediaplayer class named - isPlaying().

Try my code sequence for playpause using single button.

public void playpause(){

            if(!mp.isPlaying()){ // here mp is object of MediaPlayer class
            mp.start();
                //showNotification("Player State Plying");
            }
        else if(mp.isPlaying()){
                mp.pause();
                //showNotification("Player State Pause");

            }


    }
Karan Nagpal
  • 521
  • 1
  • 8
  • 19