import android.Manifest;
import android.app.Activity;
import android.content.pm.PackageManager;
import android.media.MediaPlayer;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.widget.Button;
import android.widget.Toast;
import com.gun0912.tedpermission.PermissionListener;
import com.gun0912.tedpermission.TedPermission;
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.Objects;
import butterknife.BindView;
import butterknife.ButterKnife;
public class MainActivity extends Activity {
private static final String permission = Manifest.permission.RECORD_AUDIO;
private File file;
private String fileName;
private MediaRecorder recorder;
private MediaPlayer mediaPlayer;
//녹음
@BindView(R.id.btn_record)
Button mBtnRecord;
//중지
@BindView(R.id.btn_stop)
Button mBtnStop;
//재생
@BindView(R.id.btn_play)
Button mBtnPlay;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
//파일 경로 및 이름 지정
fileName = Objects.requireNonNull(getExternalCacheDir()).getAbsolutePath();
fileName += "/testRecord.3gp";
//권한 체크
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
int permissionChceck = this.checkSelfPermission(permission);
if (permissionChceck == PackageManager.PERMISSION_DENIED) {
TedPermission.with(this)
.setPermissionListener(permissionListener)
.setPermissions(permission)
.check();
}
}
mBtnRecord.setOnClickListener(v -> startRecording());
mBtnStop.setOnClickListener(v -> stopRecording());
mBtnPlay.setOnClickListener(v -> startPlay());
}
PermissionListener permissionListener = new PermissionListener() {
@Override
public void onPermissionGranted() {
}
@Override
public void onPermissionDenied(List<String> deniedPermissions) {
Toast.makeText(getApplicationContext(), "권한 허용 후 녹음 가능합니다.", Toast.LENGTH_SHORT).show();
finish();
}
};
private void startRecording() {
recorder = new MediaRecorder();
//오디오 입력 선택
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
//출력파일 확장자 지정
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
//샘플링 비율
recorder.setAudioSamplingRate(44100);
//비트레이트
recorder.setAudioEncodingBitRate(96000);
//인코딩 코덱 설정
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
//오디오 파일 출력
recorder.setOutputFile(fileName);
try {
recorder.prepare();
} catch (IOException e) {
e.printStackTrace();
}
recorder.start();
}
private void stopRecording() {
if (recorder != null) {
file = new File(fileName);
recorder.stop();
recorder.release();
recorder = null;
} else {
Toast.makeText(this, "녹음을 먼저 진행해주세요.", Toast.LENGTH_SHORT).show();
}
}
private void startPlay() {
//파일이 존재하는 경우 재생 시작
if (file != null && file.exists()) {
mediaPlayer = new MediaPlayer();
try {
mediaPlayer.setDataSource(fileName);
mediaPlayer.prepare();
mediaPlayer.start();
} catch (IOException e) {
e.printStackTrace();
}
} else {
Toast.makeText(this, "녹음을 먼저 진행해주세요.", Toast.LENGTH_SHORT).show();
}
}
@Override
protected void onStop() {
super.onStop();
if (recorder != null) {
recorder.release();
recorder = null;
}
if (mediaPlayer != null) {
mediaPlayer.release();
mediaPlayer = null;
}
}
@Override
protected void onDestroy() {
//파일 삭제
if (file != null && file.exists()) file.delete();
super.onDestroy();
}
}