마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

mediarecord 녹음 중지시 IllegalStateException에러..ㅠㅠ

0 추천

녹음시작하고 녹음 중지 할때 에러가나는데 도대체 뭔지 모르겠네요 퍼미션도 줬습니다...

 
   btnStart.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                try {
//                mediaPlayer.setDataSource();
                    mediaPlayer.prepare();

                } catch (IOException e) {
                    e.printStackTrace();
                }mediaPlayer.start();
            }

        });

        //녹음시작버튼
        btnRecord.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (recorder != null) {
                    recorder.stop();
                    recorder.release();
                    recorder = null;
                }
                Log.d(TAG, "record start");

                recorder = new MediaRecorder();
                recorder.reset();
                //오디오 입력 형식 설정
                recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
                //파일 저장 방식 설정(확장자)
                recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
                //코덱 설정
                recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
                //파일 저장 경로 설정
                recorder.setOutputFile(saPath);
                try {
                    Toast.makeText(getApplicationContext(), "녹음 시작", Toast.LENGTH_SHORT).show();

                    recorder.prepare();

                } catch (IllegalStateException e) {
                    e.printStackTrace(); recorder.start();
                } catch (IOException e) {
                    e.printStackTrace();
                }

            }
        });

        //녹음종료버튼
        btnStop.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (recorder != null) {

                    try {
                        recorder.prepare();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    recorder.stop();
                    recorder.release();
                    recorder = null;
                }
                Log.d(TAG, "record stop");
                Toast.makeText(getApplicationContext(), "녹음 중지", Toast.LENGTH_SHORT).show();
            }
        });

    }
10-24 12:39:54.488 6138-6138/com.ch_l.downbuttonrecorder E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.ch_l.downbuttonrecorder, PID: 6138
    java.lang.IllegalStateException
        at android.media.MediaRecorder._stop(Native Method)
        at android.media.MediaRecorder.stop(MediaRecorder.java:1400)
        at com.ch_l.downbuttonrecorder.MainActivity$3.onClick(MainActivity.java:128)
익명사용자 님이 2018년 10월 24일 질문

1개의 답변

0 추천
https://developer.android.com/images/mediarecorder_state_diagram.gif 그림에 나오듯 start 상태일때, stop을 부를수 있는데, 올려주신 코드에는 start를 부르는 코드가 안 보입니다.

또한 종료 버튼 누를 때 recorder.prepare(); 를 다시 호출하던데, 호출할 이유가 없는듯 하니 제거 해 주셔야 할 듯 합니다.

state_diagram 그림을 보시고 각 state에  맞춰 api가 호출 되게 수정해 보세요.
익명사용자 님이 2018년 10월 24일 답변
...