activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="78dp"
android:layout_marginTop="66dp"
android:text="녹음 시작"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="84dp"
android:layout_marginTop="124dp"
android:text="재생 시작"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/button" />
</androidx.constraintlayout.widget.ConstraintLayout>
MainActivity.java
package com.example.myapplication;
import android.Manifest;
import android.content.pm.PackageManager;
import android.media.MediaPlayer;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.widget.Button;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import java.io.IOException;
public class MainActivity extends AppCompatActivity {
private static String filename = null;
Button playbutton, recordbutton;
private MediaRecorder myrecorder = null;
private MediaPlayer myplayer = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
permissionCheck(Manifest.permission.WRITE_EXTERNAL_STORAGE, 100);
permissionCheck(Manifest.permission.RECORD_AUDIO, 101);
filename = Environment.getExternalStorageDirectory().getAbsolutePath();
filename += "/recordtest.3gp";
playbutton = (Button) findViewById(R.id.button2);
recordbutton = (Button) findViewById(R.id.button);
playbutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (myplayer == null) {
myplayer = new MediaPlayer();
try {
myplayer.setDataSource(filename);
myplayer.prepare();
myplayer.start();
} catch (IOException e) {
}
playbutton.setText("재생 멈춤");
} else {
myplayer.release();
myplayer = null;
playbutton.setText("재생 시작");
}
}
});
recordbutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (myrecorder == null) {
myrecorder = new MediaRecorder();
myrecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
myrecorder.setOutputFile(filename);
myrecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
try {
myrecorder.prepare();
} catch (IOException e) {
}
myrecorder.start();
recordbutton.setText("녹음 정지");
}
else {
myrecorder.stop();
myrecorder.release();
myrecorder = null;
recordbutton.setText("녹음 시작");
}
}
});
}
public void onPause() {
super.onPause();
if (myrecorder != null) {
myrecorder.release();
myrecorder = null;
}
if (myplayer != null) {
myplayer.release();
myplayer = null;
}
}
public void permissionCheck(String permissionId, int requestCode) {
if (ActivityCompat.checkSelfPermission(this, permissionId) != PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale(this, permissionId)) {
}else {
ActivityCompat.requestPermissions(this, new String[]{permissionId}, requestCode);
}
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode) {
case 100:
break;
case 101:
break;
}
}
}
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapplication">
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>a
</manifest>
처음 앱을 실행하고 녹음 시작 버튼을 누르면 앱이 종료 되는데 앱을 다시 실행하고 권한을 허용해주면 된다. (두 가지 권한을 연달아 허용할 수 있게는 못 하나..?)
그리고 녹음 시작 버튼을 눌러 보면 놀랍게도 앱이 종료된다...
앱을 다시 켜고 재생 시작을 눌러도 아무것도 재생되지 않는다.
Device file explorer를 켜서 확인해 보니 파일이 저장되지도 않았다. (녹음 버튼을 누르면 앱이 종료됐으니 당연한 것)
실제 디바이스에 연결해서 테스트 해 볼 필요가 있을 것 같다.
'안드로이드 Android' 카테고리의 다른 글
[모바일프로그래밍] 10-1 스레드 개념 (0) | 2020.11.08 |
---|---|
[모바일프로그래밍] 9-5 카메라 영상 캡처 (0) | 2020.11.08 |
[모바일프로그래밍] 9-3 MediaPlayer 사용하는 방법 (0) | 2020.11.08 |
[모바일프로그래밍] 9-2 멀티미디어 데이터 (0) | 2020.11.08 |
[모바일프로그래밍] 9-1 리소스 관리 (0) | 2020.11.08 |