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;
}
}
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();
}