import
android.content.pm.PackageManager;
import
android.media.MediaPlayer;
import
android.media.MediaRecorder;
import
android.os.Bundle;
import
android.os.Environment;
import
android.util.Log;
import
android.view.View;
import
android.widget.TextView;
import
android.widget.Toast;
import
androidx.appcompat.app.AppCompatActivity;
import
androidx.core.app.ActivityCompat;
import
androidx.core.content.ContextCompat;
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
TextView startTV, stopTV, playTV, stopplayTV, statusTV;
private
MediaRecorder mRecorder;
private
MediaPlayer mPlayer;
private
static
String mFileName =
null
;
public
static
final
int
REQUEST_AUDIO_PERMISSION_CODE =
1
;
@Override
protected
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
statusTV = findViewById(R.id.idTVstatus);
startTV = findViewById(R.id.btnRecord);
stopTV = findViewById(R.id.btnStop);
playTV = findViewById(R.id.btnPlay);
stopplayTV = findViewById(R.id.btnStopPlay);
stopTV.setBackgroundColor(getResources().getColor(R.color.gray));
playTV.setBackgroundColor(getResources().getColor(R.color.gray));
stopplayTV.setBackgroundColor(getResources().getColor(R.color.gray));
startTV.setOnClickListener(
new
View.OnClickListener() {
@Override
public
void
onClick(View v) {
startRecording();
}
});
stopTV.setOnClickListener(
new
View.OnClickListener() {
@Override
public
void
onClick(View v) {
pauseRecording();
}
});
playTV.setOnClickListener(
new
View.OnClickListener() {
@Override
public
void
onClick(View v) {
playAudio();
}
});
stopplayTV.setOnClickListener(
new
View.OnClickListener() {
@Override
public
void
onClick(View v) {
pausePlaying();
}
});
}
private
void
startRecording() {
if
(CheckPermissions()) {
stopTV.setBackgroundColor(getResources().getColor(R.color.purple_200));
startTV.setBackgroundColor(getResources().getColor(R.color.gray));
playTV.setBackgroundColor(getResources().getColor(R.color.gray));
stopplayTV.setBackgroundColor(getResources().getColor(R.color.gray));
mFileName = Environment.getExternalStorageDirectory().getAbsolutePath();
mFileName +=
"/AudioRecording.3gp"
;
mRecorder =
new
MediaRecorder();
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
mRecorder.setOutputFile(mFileName);
try
{
mRecorder.prepare();
}
catch
(IOException e) {
Log.e(
"TAG"
,
"prepare() failed"
);
}
mRecorder.start();
statusTV.setText(
"Recording Started"
);
}
else
{
RequestPermissions();
}
}
@Override
public
void
onRequestPermissionsResult(
int
requestCode, String[] permissions,
int
[] grantResults) {
switch
(requestCode) {
case
REQUEST_AUDIO_PERMISSION_CODE:
if
(grantResults.length >
0
) {
boolean
permissionToRecord = grantResults[
0
] == PackageManager.PERMISSION_GRANTED;
boolean
permissionToStore = grantResults[
1
] == PackageManager.PERMISSION_GRANTED;
if
(permissionToRecord && permissionToStore) {
Toast.makeText(getApplicationContext(),
"Permission Granted"
, Toast.LENGTH_LONG).show();
}
else
{
Toast.makeText(getApplicationContext(),
"Permission Denied"
, Toast.LENGTH_LONG).show();
}
}
break
;
}
}
public
boolean
CheckPermissions() {
int
result = ContextCompat.checkSelfPermission(getApplicationContext(), WRITE_EXTERNAL_STORAGE);
int
result1 = ContextCompat.checkSelfPermission(getApplicationContext(), RECORD_AUDIO);
return
result == PackageManager.PERMISSION_GRANTED && result1 == PackageManager.PERMISSION_GRANTED;
}
private
void
RequestPermissions() {
ActivityCompat.requestPermissions(MainActivity.
this
,
new
String[]{RECORD_AUDIO, WRITE_EXTERNAL_STORAGE}, REQUEST_AUDIO_PERMISSION_CODE);
}
public
void
playAudio() {
stopTV.setBackgroundColor(getResources().getColor(R.color.gray));
startTV.setBackgroundColor(getResources().getColor(R.color.purple_200));
playTV.setBackgroundColor(getResources().getColor(R.color.gray));
stopplayTV.setBackgroundColor(getResources().getColor(R.color.purple_200));
mPlayer =
new
MediaPlayer();
try
{
mPlayer.setDataSource(mFileName);
mPlayer.prepare();
mPlayer.start();
statusTV.setText(
"Recording Started Playing"
);
}
catch
(IOException e) {
Log.e(
"TAG"
,
"prepare() failed"
);
}
}
public
void
pauseRecording() {
stopTV.setBackgroundColor(getResources().getColor(R.color.gray));
startTV.setBackgroundColor(getResources().getColor(R.color.purple_200));
playTV.setBackgroundColor(getResources().getColor(R.color.purple_200));
stopplayTV.setBackgroundColor(getResources().getColor(R.color.purple_200));
mRecorder.stop();
mRecorder.release();
mRecorder =
null
;
statusTV.setText(
"Recording Stopped"
);
}
public
void
pausePlaying() {
mPlayer.release();
mPlayer =
null
;
stopTV.setBackgroundColor(getResources().getColor(R.color.gray));
startTV.setBackgroundColor(getResources().getColor(R.color.purple_200));
playTV.setBackgroundColor(getResources().getColor(R.color.purple_200));
stopplayTV.setBackgroundColor(getResources().getColor(R.color.gray));
statusTV.setText(
"Recording Play Stopped"
);
}
}