2011-01-13 4 views
0

장치에 소리를 녹음하는 데 몇 가지 문제가 있습니다. 다음과 같이 내가 안드로이드 dev에 사이트 (Site Link)의 경우 사용하고있는 코드는 다음과 같습니다 그것입니다 (이론적으로) 모두 중지를 켜고 녹음을 시작 메인 레이아웃녹음에 대한 사용 권한 문제

public void onClickStart(View v) throws IllegalStateException, IOException{ 
     startRecord(); 
    } 

    public void onClickStop(View v) throws IllegalStateException, IOException{ 
     stopRecord(); 
    } 

    private void startRecord() throws IllegalStateException, IOException{ 
     recorder = new MediaRecorder(); 
     recorder.setAudioSource(MediaRecorder.AudioSource.MIC); //ok so I say audio source is the microphone, is it windows/linux microphone on the emulator? 
     recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
     recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 
     recorder.setOutputFile("/sdcard/test.3gpp"); 
     recorder.prepare(); 
     recorder.start(); 
    } 

    private void stopRecord(){ 
     recorder.stop(); 
//  recorder.release(); 
    } 

2와 단추.

하지만 내 장치에서이 작업을 시도 할 때 로그 캣에서

나는 다음과 같은 오류를 얻을 수 (정말 에뮬레이터에 노력과 방해 캔트) :

Error 1: 
ERROR/MediaRecorder(14541): start called in an invalid state: 4 
java.lang.IllegalStateException: Could not execute method of the activity 
Caused by: java.lang.reflect.InvocationTargetException 

Error 2: 
Caused by: java.io.FileNotFoundException: /sdcard/test.3gpp (Permission denied) 

그리고 또한 다음과 같은 권한 내 매니페스트에서 설정했습니다. XML 파일 : 오류 2의

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

답변

8

어리석은 오류 여기에 미안하지만, 실제로 휴대 전화를 내 노트북에 장착했기 때문에 죄송합니다. 실제로 sdcard에 연결할 수 없습니다.

3

: 어쩌면 그 경로가 장치에 연결할 수/유효하지 않은 정적 대신 "sdcard에"의 getExternalStorageDirectory()를 사용하려고합니다.

1

이 문제를 일으키는 다른 사람들에게 예외는 FileNotFoundException이 권한 거부와 관련되어 있다고 항상 말하는 것은 아닙니다. AndroidManifest.xml에 WRITE_EXTERNAL_STORAGE 권한이 있는지 확인하십시오. OP의 경우에는 그렇게했습니다.

외부 SD 카드 파일을 만들고 (mksdcard 명령을 사용하여) 휴대 전화와 연결하더라도 getExternalStorageDirectory()를 호출해도 여전히/sdcard를 가리킬 수 있습니다 (메서드의 계약서는 내부 저장소가 아닌 위치를 반환). 'adb shell'명령을 사용하여 sdcard가 있는지 항상 확인할 수 있습니다. sdcard에서 /로 파일을 복사하려면 'adb pull'/ 'adb push'명령을 사용하십시오.

참고 :

http://developer.android.com/guide/developing/devices/emulator.html#sdcard

How to copy and edit files in Android shell?

writing to sdcard not working

1

출력 파일에없는 하드 코어 /sdcard/test.3gpp를 수행, 사용한다 getExternalStorage() 사용 추적 코드 :

boolean exists = (new File(android.os.Environment.getExternalStorageDirectory() + "/Record/")).exists(); 
if (!exists) { 
    new File(android.os.Environment.getExternalStorageDirectory() + "/Record/").mkdirs(); 
} 

및 출력 파일이 경로를 설정 recorder.setOutputFile(android.os.Environment.getExternalStorageDirectory()+"/Record/test.3gp");

이 작품 나를

1

나는 어떤 사람들은 매니페스트에 쓰기 권한이 누락 겠지 위해.

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

주요 매니페스트 태그 내에서

, 다음과 같은 권한을 가지고 있는지 확인하십시오