0
내 응용 프로그램에 오디오 레코더 클래스가 있습니다. 그것은 이전에 잘 일하고 내 HTC 욕망에 잘 작동하지만 지금은 내 LG에서 작동하지 않습니다. 더 이상 오디오 파일을 필요한 경로에 저장하지 않습니다. 나는 그것이 전화를 걸려 넘어지는 것을 생각하고있다. 그러나 나는 틀릴 것이다. writeAudioDataFile
가 try-catch
블록에AudioRecorder가 더 이상 작동하지 않습니다. FileNotFoundException : 사용 권한이 거부되었습니다.
private String getTempFilename(){
String filepath = Environment.getExternalStorageDirectory().getPath();
File file = new File(filepath,AUDIO_RECORDER_FOLDER);
if(!file.exists()){
file.mkdirs();
}
File tempFile = new File(filepath,AUDIO_RECORDER_TEMP_FILE);
if(tempFile.exists()){
tempFile.delete();
}
return (file.getAbsolutePath() + "/" + AUDIO_RECORDER_TEMP_FILE);
}
private void writeAudioDataToFile(){
byte data[] = new byte[bufferSize];
String filename = getTempFilename();
FileOutputStream os = null;
try {
os = new FileOutputStream(filename);
} catch (FileNotFoundException e) {
System.out.println("error");
e.printStackTrace();
}
int read = 0;
if(null != os){
while(isRecording){
read = recorder.read(data, 0, bufferSize);
if(AudioRecord.ERROR_INVALID_OPERATION != read){
try {
os.write(data);
}
catch (Exception e) {
e.printStackTrace();
}
}
}
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
private void stopRecording(){
if(null != recorder){
isRecording = false;
recorder.stop();
recorder.release();
recorder = null;
recordingThread = null;
}
copyWaveFile(getTempFilename(),getFilename());
deleteTempFile();
}
private void copyWaveFile(String inFilename,String outFilename){
FileInputStream in = null;
FileOutputStream out = null;
long totalAudioLen = 0;
long totalDataLen = totalAudioLen + 36;
long longSampleRate = RECORDER_SAMPLERATE;
int channels = 2;
long byteRate = RECORDER_BPP * RECORDER_SAMPLERATE * channels/8;
byte[] data = new byte[bufferSize];
try {
in = new FileInputStream(inFilename);
out = new FileOutputStream(outFilename);
totalAudioLen = in.getChannel().size();
totalDataLen = totalAudioLen + 36;
//AppLog.logString("File size: " + totalDataLen);
WriteWaveFileHeader(out, totalAudioLen, totalDataLen,
longSampleRate, channels, byteRate);
while(in.read(data) != -1){
out.write(data);
}
in.close();
out.close();
GlobalVar appState = ((GlobalVar)getApplicationContext());
appState.addAudioFile(outFilename);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
오류 로그 filename
로 FileOutputStream
를 인스턴스화 할 때
오류가 발생합니다 : 최신 버전의
01-25 15:46:08.143: W/System.err(1828): java.io.FileNotFoundException: /mnt/sdcard/GeneralGUI2/Study1/Music/record_temp.raw (Permission denied)
01-25 15:46:08.143: W/System.err(1828): at org.apache.harmony.luni.platform.OSFileSystem.openImpl(Native Method)
01-25 15:46:08.143: W/System.err(1828): at org.apache.harmony.luni.platform.OSFileSystem.open(OSFileSystem.java:152)
01-25 15:46:08.143: W/System.err(1828): at java.io.FileInputStream.<init>(FileInputStream.java:82)
01-25 15:46:08.143: W/System.err(1828): at java.io.FileInputStream.<init>(FileInputStream.java:134)
01-25 15:46:08.143: W/System.err(1828): at mfc.generalguixapi8.AudioActivity2.copyWaveFile(AudioActivity2.java:239)
01-25 15:46:08.143: W/System.err(1828): at mfc.generalguixapi8.AudioActivity2.stopRecording(AudioActivity2.java:217)
01-25 15:46:08.143: W/System.err(1828): at mfc.generalguixapi8.AudioActivity2.access$1(AudioActivity2.java:206)
01-25 15:46:08.153: W/System.err(1828): at mfc.generalguixapi8.AudioActivity2$2.onClick(AudioActivity2.java:126)
01-25 15:46:08.153: W/System.err(1828): at android.view.View.performClick(View.java:2408)
01-25 15:46:08.153: W/System.err(1828): at android.view.View$PerformClick.run(View.java:8816)
01-25 15:46:08.153: W/System.err(1828): at android.os.Handler.handleCallback(Handler.java:587)
01-25 15:46:08.153: W/System.err(1828): at android.os.Handler.dispatchMessage(Handler.java:92)
01-25 15:46:08.153: W/System.err(1828): at android.os.Looper.loop(Looper.java:123)
01-25 15:46:08.153: W/System.err(1828): at android.app.ActivityThread.main(ActivityThread.java:4627)
01-25 15:46:08.153: W/System.err(1828): at java.lang.reflect.Method.invokeNative(Native Method)
01-25 15:46:08.153: W/System.err(1828): at java.lang.reflect.Method.invoke(Method.java:521)
01-25 15:46:08.153: W/System.err(1828): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
01-25 15:46:08.153: W/System.err(1828): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
01-25 15:46:08.153: W/System.err(1828): at dalvik.system.NativeStart.main(Native Method)
이미 내 매니페스트 파일에 해당 권한이 있습니다. 그리고 나는 이미 루트가 아닌 폴더에 글을 쓰고 있습니다. – Neeta
경로를 기록하고 여기에 붙여 넣을 수 있습니까? –
방금 오류 로그를 추가했습니다. 위의 설명을 작성하고 편집 한 경로가 표시됩니다. 오류는 내가 생각한 곳이 아닙니다. – Neeta