안드로이드 녹음하기 에러

조회수 743회

MainActivity에는

package org.techtown.recoder

import android.media.MediaPlayer
import android.media.MediaRecorder
import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import com.yanzhenjie.permission.AndPermission
import com.yanzhenjie.permission.runtime.Permission
import kotlinx.android.synthetic.main.activity_main.*
import java.io.File


class MainActivity : AppCompatActivity() {
    var recorder: MediaRecorder = MediaRecorder()
    var player: MediaPlayer = MediaPlayer()
    var filename:String? = null
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    filename = externalCacheDir?.absolutePath + File.separator + "recording.mp4"

    startRecordingButton.setOnClickListener {
        startRecording()
        output1.append("녹음 시작함\n")
    }

    stopRecordingButton.setOnClickListener {
        recorder.stop()
        output1.append("녹음 중지함\n")
    }

    startPlayButton.setOnClickListener {
        startPlay()
        output1.append("재생 시작함\n")
    }

    stopPlayButton.setOnClickListener {
        player.stop()
        output1.append("재생 중지함\n")
    }


    AndPermission.with(this)
        .runtime()
        .permission(Permission.Group.STORAGE)
        .onGranted { permissions ->
            Log.d("Main", "허용된 권한 갯수 : ${permissions.size}")
        }
        .onDenied { permissions ->
            Log.d("Main", "거부된 권한 갯수 : ${permissions.size}")
        }
        .start()
}

fun startRecording() {
    recorder.reset()

    recorder.setAudioSource(MediaRecorder.AudioSource.MIC)
    recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4)
    recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT)
    recorder.setOutputFile(filename)

    try {
        recorder.prepare()
        recorder.start()
    } catch (e: Exception) {
        e.printStackTrace()
    }
}

fun startPlay() {
    player.reset()

    player.setDataSource("file://$filename")

    try {
        player.prepare()
        player.start()
    } catch (e: Exception) {
        e.printStackTrace()
    }
}

}

AndroidManifest.xml에는

    <uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

를 추가했습니다.

아이디가 startRecordingButton인 버튼을 클릭하면 아래의 에러가 나고 앱이 종료되는데,, 어느 부분이 에러인지 도무지 모르겠습니다... 어디가 잘못된 건가요..?

2021-07-29 20:12:05.006 8250-8250/org.techtown.recoder E/AndroidRuntime: FATAL EXCEPTION: main Process: org.techtown.recoder, PID: 8250 java.lang.RuntimeException: setAudioSource failed. at android.media.MediaRecorder.setAudioSource(Native Method) at org.techtown.recoder.MainActivity.startRecording(MainActivity.kt:61) at org.techtown.recoder.MainActivity$onCreate$1.onClick(MainActivity.kt:26) at android.view.View.performClick(View.java:7125) at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1119) at android.view.View.performClickInternal(View.java:7102) at android.view.View.access$3500(View.java:801) at android.view.View$PerformClick.run(View.java:27336) at android.os.Handler.handleCallback(Handler.java:883) at android.os.Handler.dispatchMessage(Handler.java:100) at android.os.Looper.loop(Looper.java:214) at android.app.ActivityThread.main(ActivityThread.java:7356) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)

  • (•́ ✖ •̀)
    알 수 없는 사용자
  • 런타임 권한 체크에 녹음에 관한 권한도 추가해주셔야 할 것 같습니다. 알 수 없는 사용자 2021.7.29 20:46

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)