Search code examples
androidaudiomedia-player

MediaPlayer is not pausing the audio file


I have an audio recording application which will record audio through a mic, after recording audio it will play the audio when the user press play button, till here it works great, but I want to pause the audio file while playing when the user clicks the pause button. This is my java code. How to do that?

public class tab1 extends Fragment {

private ViewPager mViewPager;
private Button play,stop,record;
private MediaRecorder myAudioRecorder;
private String outputfile;


public tab1() {

}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {


    final View rootview=inflater.inflate(R.layout.fragment_tab1,container,false);


    final ImageButton  record=(ImageButton)rootview.findViewById(R.id.record);
   final ImageButton stop=(ImageButton) rootview.findViewById(R.id.stop);
   final ImageButton play=(ImageButton) rootview.findViewById(R.id.play);
    final  ImageButton pause=(ImageButton)rootview.findViewById(R.id.pause);


 stop.setVisibility(getView().INVISIBLE);


    File directorysample=new File(Environment.getExternalStorageDirectory()+separator+"RadioRecords");
    directorysample.mkdirs();
    String filename = "/recording_" + System.currentTimeMillis() + ".mp3";
    final  String directory = Environment.getExternalStorageDirectory()+ "/RadioRecords";
    outputfile = directory + "/" + filename;




    record.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            try {


                myAudioRecorder=new MediaRecorder();
                myAudioRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
                myAudioRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
                myAudioRecorder.setAudioEncoder(MediaRecorder.OutputFormat.DEFAULT);
                myAudioRecorder.setOutputFile(outputfile);
                myAudioRecorder.prepare();
                myAudioRecorder.start();
            }
            catch (IllegalStateException ise){



            }catch (IOException ioe){



            }
         // record.setEnabled(false);
          //stop.setEnabled(true);
            stop.setVisibility(getView().VISIBLE);


        }

    });


    stop.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {



            myAudioRecorder.stop();
        //   record.setEnabled(true);
            myAudioRecorder.release();
            myAudioRecorder=null;
         //stop.setEnabled(false);
       //play.setEnabled(true);


            stop.setVisibility(getView().INVISIBLE);

        }

    });
    play.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            MediaPlayer mediaPlayer=new MediaPlayer();

            try {
                mediaPlayer.setDataSource(outputfile);
                mediaPlayer.prepare();
                mediaPlayer.start();


            }
            catch (Exception e)
            {

            }

        }
    });

    pause.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            MediaPlayer mediaPlayer=new MediaPlayer();

            try {
                mediaPlayer.setDataSource(outputfile);
                mediaPlayer.prepare();
                mediaPlayer.pause();


            }
            catch (Exception e)
            {

            }

        }
    });
    return rootview;
}

 }

Solution

  • Do not use multiple MediaPlayers for play and pause. Use One MediaPlayer. Initiate it in onCreateView or play onClick and use where you want.

    Declare one MediaPlayer globally:

    MediaPlayer mediaPlayer;
    

    Initiate it in onCreateView or play onClick:

    mediaPlayer = new MediaPlayer();
    

    And replace this:

    mediaPlayer.setDataSource(outputfile);
    mediaPlayer.prepare();
    mediaPlayer.pause();
    

    With:

    if (mediaPlayer.isPlaying()) {
         mediaPlayer.pause();
    }