게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
안드로이드) 녹음.. fartal 오류뜨는데 이유를 모르겠습니다..로그캣
게시물ID : programmer_18395짧은주소 복사하기
작성자 : 민트향쿠키
추천 : 0
조회수 : 4832회
댓글수 : 6개
등록시간 : 2016/09/09 06:12:10
옵션
  • 본인삭제금지

<로그캣>
09-09 06:05:41.679 14263-14263/ado.recordtest E/AndroidRuntime: FATAL EXCEPTION: main
                                                                Process: ado.recordtest, PID: 14263
                                                                java.lang.RuntimeException: setAudioSource failed.
                                                                    at android.media.MediaRecorder.setAudioSource(Native Method)
                                                                    at ado.recordtest.AddActivity$1.onClick(AddActivity.java:79)
                                                                    at android.view.View.performClick(View.java:5204)
                                                                    at android.view.View$PerformClick.run(View.java:21153)
                                                                    at android.os.Handler.handleCallback(Handler.java:739)
                                                                    at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                    at android.os.Looper.loop(Looper.java:148)
                                                                    at android.app.ActivityThread.main(ActivityThread.java:5417)
                                                                    at java.lang.reflect.Method.invoke(Native Method)
                                                                    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616).

<문제가 되는 부분>

if (recorder != null){ // recorder에 뭐가 들어있으면 초기화해줌
recorder.stop();
recorder.release();
recorder = null;
}

try {
recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC); <<== 여기!
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);

recorder.setOutputFile(RECORD_FILE + getTagId() + RECORD_TYPE);

Toast.makeText(AddActivity.this, "녹음을 시작합니다.", Toast.LENGTH_SHORT).show();
recorder.prepare();
recorder.start();
} catch (IOException e) {
e.printStackTrace();
}

<퍼미션- 매니페스트>
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

<코드상 퍼미션 확인>
final static int MY_PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE = 100;
final static int MY_PERMISSIONS_REQUEST_RECORD_AUDIO = 200;

public void checkPermission(){

int permissionCheck_RECORD = ContextCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO);
int permissionCheck_WRITE = ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE);

if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.RECORD_AUDIO)!= PackageManager.PERMISSION_GRANTED){
//(ContextCompat.checkSelfPermission(this, android.Manifest.permission.WRITE_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED)

if ( (ActivityCompat.shouldShowRequestPermissionRationale(this, android.Manifest.permission.RECORD_AUDIO)) ||
(ActivityCompat.shouldShowRequestPermissionRationale(this, android.Manifest.permission.WRITE_EXTERNAL_STORAGE))){

// 다이어로그같은것을 띄워서 사용자에게 해당 권한이 필요한 이유에 대해 설명합니다
// 해당 설명이 끝난뒤 requestPermissions()함수를 호출하여 권한허가를 요청해야 합니다

} else {

ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.ACCESS_COARSE_LOCATION}, MY_PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE);
ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION}, MY_PERMISSIONS_REQUEST_RECORD_AUDIO);

// 필요한 권한과 요청 코드를 넣어서 권한허가요청에 대한 결과를 받아야 합니다

}
}
}

<MediaRecorder import>
import android.media.MediaPlayer;
import android.media.MediaRecorder;
========================================================
기존에 있는 오픈소스 사용한거고.. 
마시멜로우 이상이기 때문에 (자꾸 오류가 나서..) 코드상으로 퍼미션 확인해주는 코드를 추가해주었습니다.
녹음 버튼을 누르면 녹음이 되는 기능인데요..ㅠㅠ 제가 생각할 때는 퍼미션도 제대로 들어갔고..
기존에 다른 분들이 정상적으로 돌아간다고 올려놓은거 참고해서 한건데 안돌아가니까 당황스러워요..
딱히 로그캣에서도 확인이 어렵고 ㅠㅠ 저 부분이 문제당! 하는데 검색해봐도 답이 나오질 않아서 며칠 맘고생하다가 ㅠㅠ
이제야 질문을 올립니다 도와주세요!! 왜그럴까요!? ㅠㅠ
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호