2012-08-01 3 views
0

녹음 응용 프로그램을 하나 만들고 있습니다. 오디오를 녹음하고 SD에 저장해야합니다.
카드. 여기 오디오 녹음의 예외 발생

enter code here 
08-01 12:09:18.331: E/SoundRecordingActivity(5611): sdcard access error 
08-01 12:09:21.043: D/AndroidRuntime(5611): Shutting down VM 
08-01 12:09:21.043: W/dalvikvm(5611): threadid=1: thread exiting with uncaught exception (group=0x2c3381f8) 
08-01 12:09:21.043: E/AndroidRuntime(5611): FATAL EXCEPTION: main 
08-01 12:09:21.043: E/AndroidRuntime(5611): java.lang.NullPointerException 
08-01 12:09:21.043: E/AndroidRuntime(5611):  at com.blitze.recordingapp.SoundRecordingActivity$2.onClick(SoundRecordingActivity.java:110) 
08-01 12:09:21.043: E/AndroidRuntime(5611):  at android.view.View.performClick(View.java:3511) 
08-01 12:09:21.043: E/AndroidRuntime(5611):  at android.view.View$PerformClick.run(View.java:14115) 
08-01 12:09:21.043: E/AndroidRuntime(5611):  at android.os.Handler.handleCallback(Handler.java:605) 
08-01 12:09:21.043: E/AndroidRuntime(5611):  at android.os.Handler.dispatchMessage(Handler.java:92) 
08-01 12:09:21.043: E/AndroidRuntime(5611):  at android.os.Looper.loop(Looper.java:137) 
08-01 12:09:21.043: E/AndroidRuntime(5611):  at android.app.ActivityThread.main(ActivityThread.java:4424) 
08-01 12:09:21.043: E/AndroidRuntime(5611):  at java.lang.reflect.Method.invokeNative(Native Method) 
08-01 12:09:21.043: E/AndroidRuntime(5611):  at java.lang.reflect.Method.invoke(Method.java:511) 
08-01 12:09:21.043: E/AndroidRuntime(5611):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
08-01 12:09:21.043: E/AndroidRuntime(5611):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
08-01 12:09:21.043: E/AndroidRuntime(5611):  at dalvik.system.NativeStart.main(Native Method) 
08-01 12:09:23.759: W/System.err(5611): java.lang.Throwable: stack dump 
08-01 12:09:23.759: W/System.err(5611):  at java.lang.Thread.dumpStack(Thread.java:496) 
08-01 12:09:23.759: W/System.err(5611):  at android.os.Process.killProcess(Process.java:725) 
08-01 12:09:23.759: W/System.err(5611):  at com.android.internal.os.RuntimeInit$UncaughtHandler.uncaughtException(RuntimeInit.java:82) 
08-01 12:09:23.759: W/System.err(5611):  at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:693) 
08-01 12:09:23.759: W/System.err(5611):  at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:690) 
08-01 12:09:23.759: W/System.err(5611):  at dalvik.system.NativeStart.main(Native Method) 

내 코드 로그 캣 내가 그것을 잘 실행되는 응용 프로그램을 실행하려고하지만 난 눌러 정지 버튼을 오전 때 메시지를 표시하지만 "불행히도 응용 프로그램이되었습니다 정지"여기
이다

startButton.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      startButton.setEnabled(false); 
      stopButton.setEnabled(true); 

      File sampleDir = Environment.getExternalStorageDirectory(); 
      try { 
       audiofile = File.createTempFile("sound", ".3gp", sampleDir); 

      recorder = new MediaRecorder(); 
      recorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
      recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
      recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 
      recorder.setOutputFile(audiofile.getAbsolutePath()); 
      recorder.prepare(); 
      recorder.start(); 




      } catch (IOException e) { 
       Log.e(TAG, "sdcard access error"); 
       return; 
      } 



     } 
    }); 
    stopButton.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View v) { 
      startButton.setEnabled(true); 
      stopButton.setEnabled(false); 
      recorder.stop(); 
      recorder.release(); 

      //counter.cancel(); 
      addRecordingToMediaLibrary(); 

     } 
    }); 

protected void addRecordingToMediaLibrary() { 
    ContentValues values = new ContentValues(4); 
    long current = System.currentTimeMillis(); 
    values.put(MediaStore.Audio.Media.TITLE, "audio" + audiofile.getName()); 
    values.put(MediaStore.Audio.Media.DATE_ADDED, (int) (current/1000)); 
    values.put(MediaStore.Audio.Media.MIME_TYPE, "audio/3gpp"); 
    values.put(MediaStore.Audio.Media.DATA, audiofile.getAbsolutePath()); 
    ContentResolver contentResolver = getContentResolver(); 

    Uri base = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; 
    Uri newUri = contentResolver.insert(base, values); 

    sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, newUri)); 
    Toast.makeText(this, "Added File " + newUri, Toast.LENGTH_LONG).show(); 
} 

}

모바일에 SD 카드를 연결했습니다. 나는 무엇이 문제인지 이해하지 못한다. 힌트 또는 참조를주세요.
감사합니다 ..

+2

매니페스트 에 sdcard 쓰기 권한이 있습니까? 로그의 첫 번째 줄에 "sd card access error"가 표시되어있는 것 같습니다. –

답변

0

OnClick 함수에서 줄 번호 110을 살펴 봐야합니다. "recorder.stop()"과 같은 것을 참조 할 것이고이 시점에서 레코더는 NULL이 될 것입니다.

start 함수에서 만든 레코더 객체의 인스턴스를 stop 함수에 전달해야하는 것처럼 보입니다.