package com.gsm_developers.media_recorder_gsm; import android.content.pm.PackageManager; import android.media.MediaPlayer; import android.media.MediaRecorder; import android.os.Environment; import android.support.v4.app.ActivityCompat; import android.support.v4.content.ContextCompat; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.Toast; import java.io.IOException; import static android.Manifest.permission.RECORD_AUDIO; import static android.Manifest.permission.WRITE_EXTERNAL_STORAGE; public class MainActivity extends AppCompatActivity { private Button startBtn,stopBtn,playBtn,stopPlayingBtn; MediaRecorder mediaRecorder; MediaPlayer mediaPlayer; String AudioSavePathInDevice = null; public static final int RequestPermissionCode = 1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); startBtn = (Button) findViewById(R.id.StartButton); stopBtn = (Button) findViewById(R.id.StopButton); playBtn = (Button) findViewById(R.id.PlayButton); stopPlayingBtn = (Button)findViewById(R.id.StopPlayingBtn); stopBtn.setEnabled(false); playBtn.setEnabled(false); stopPlayingBtn.setEnabled(false); startBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if(checkPermission()) { AudioSavePathInDevice = Environment.getExternalStorageDirectory().getAbsolutePath() + "/AudioRecording.3gp"; MediaRecorderReady(); try { mediaRecorder.prepare(); mediaRecorder.start(); } catch (IllegalStateException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } startBtn.setEnabled(false); stopBtn.setEnabled(true); Toast.makeText(MainActivity.this, "Recording started", Toast.LENGTH_LONG).show(); } else { requestPermission(); } } }); stopBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { mediaRecorder.stop(); stopBtn.setEnabled(false); playBtn.setEnabled(true); startBtn.setEnabled(true); stopPlayingBtn.setEnabled(false); Toast.makeText(MainActivity.this, "Recording Completed", Toast.LENGTH_LONG).show(); } }); playBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) throws IllegalArgumentException, SecurityException, IllegalStateException { stopBtn.setEnabled(false); startBtn.setEnabled(false); stopPlayingBtn.setEnabled(true); mediaPlayer = new MediaPlayer(); try { mediaPlayer.setDataSource(AudioSavePathInDevice); mediaPlayer.prepare(); } catch (IOException e) { e.printStackTrace(); } mediaPlayer.start(); Toast.makeText(MainActivity.this, "Recording Playing", Toast.LENGTH_LONG).show(); } }); stopPlayingBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { stopBtn.setEnabled(false); startBtn.setEnabled(true); stopPlayingBtn.setEnabled(false); playBtn.setEnabled(true); if(mediaPlayer != null){ mediaPlayer.stop(); mediaPlayer.release(); MediaRecorderReady(); } } }); } public void MediaRecorderReady(){ mediaRecorder=new MediaRecorder(); mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); mediaRecorder.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB); mediaRecorder.setOutputFile(AudioSavePathInDevice); } private void requestPermission() { ActivityCompat.requestPermissions(MainActivity.this, new String[]{WRITE_EXTERNAL_STORAGE, RECORD_AUDIO}, RequestPermissionCode); } @Override public void onRequestPermissionsResult(int requestCode,String permissions[], int[] grantResults) { switch (requestCode) { case RequestPermissionCode: if (grantResults.length> 0) { boolean StoragePermission = grantResults[0] == PackageManager.PERMISSION_GRANTED; boolean RecordPermission = grantResults[1] == PackageManager.PERMISSION_GRANTED; if (StoragePermission && RecordPermission) { Toast.makeText(MainActivity.this, "Permission Granted", Toast.LENGTH_LONG).show(); } else { Toast.makeText(MainActivity.this,"Permission Denied",Toast.LENGTH_LONG).show(); } } break; } } public boolean checkPermission() { int result = ContextCompat.checkSelfPermission(getApplicationContext(), WRITE_EXTERNAL_STORAGE); int result1 = ContextCompat.checkSelfPermission(getApplicationContext(), RECORD_AUDIO); return result == PackageManager.PERMISSION_GRANTED && result1 == PackageManager.PERMISSION_GRANTED; } }