2013-04-20 2 views
4

누구든지이 문제를 해결할 방법을 알고 있습니까? 사진을 찍으려는 의도의 카메라를 사용하고 있습니다. 다음 방법은 그림을 저장할 파일을 생성합니다. 그러나 mkdirs()은 장치에 디렉터리를 만들 수 없습니다. 그런 상황에서 나의 선택은 무엇입니까?mediaStorageDir.mkdirs() 디렉토리를 만들지 않음

private static File getOutputMediaFile() { 
    File mediaStorageDir = new File(
     Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), 
     "MyCameraApp"); 
    if (!mediaStorageDir.exists()) { 
     if (!mediaStorageDir.mkdirs()) { 
      Log.d("MyCameraApp", "failed to create directory"); 
      return null; 
     } 
    } 
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss") 
     .format(new Date()); 
    return new File(mediaStorageDir.getPath() + File.separator + "IMG_" 
     + timeStamp + ".jpg"); 
} 

오류 로그 :

04-20 09:56:07.370: D/MyCameraApp(809): failed to create directory 
04-20 09:56:07.370: D/AndroidRuntime(809): Shutting down VM 
04-20 09:56:07.370: W/dalvikvm(809): threadid=1: thread exiting with uncaught exception (group=0x40a13300) 
04-20 09:56:07.441: E/AndroidRuntime(809): FATAL EXCEPTION: main 
04-20 09:56:07.441: E/AndroidRuntime(809): java.lang.IllegalStateException: Could not execute method of the activity 
04-20 09:56:07.441: E/AndroidRuntime(809): at android.view.View$1.onClick(View.java:3591) 
04-20 09:56:07.441: E/AndroidRuntime(809): at android.view.View.performClick(View.java:4084) 
04-20 09:56:07.441: E/AndroidRuntime(809): at android.view.View$PerformClick.run(View.java:16966) 
04-20 09:56:07.441: E/AndroidRuntime(809): at android.os.Handler.handleCallback(Handler.java:615) 
04-20 09:56:07.441: E/AndroidRuntime(809): at android.os.Handler.dispatchMessage(Handler.java:92) 
04-20 09:56:07.441: E/AndroidRuntime(809): at android.os.Looper.loop(Looper.java:137) 
04-20 09:56:07.441: E/AndroidRuntime(809): at android.app.ActivityThread.main(ActivityThread.java:4745) 
04-20 09:56:07.441: E/AndroidRuntime(809): at java.lang.reflect.Method.invokeNative(Native Method) 
04-20 09:56:07.441: E/AndroidRuntime(809): at java.lang.reflect.Method.invoke(Method.java:511) 
04-20 09:56:07.441: E/AndroidRuntime(809): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
04-20 09:56:07.441: E/AndroidRuntime(809): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
04-20 09:56:07.441: E/AndroidRuntime(809): at dalvik.system.NativeStart.main(Native Method) 
04-20 09:56:07.441: E/AndroidRuntime(809): Caused by: java.lang.reflect.InvocationTargetException 
04-20 09:56:07.441: E/AndroidRuntime(809): at java.lang.reflect.Method.invokeNative(Native Method) 
04-20 09:56:07.441: E/AndroidRuntime(809): at java.lang.reflect.Method.invoke(Method.java:511) 
04-20 09:56:07.441: E/AndroidRuntime(809): at android.view.View$1.onClick(View.java:3586) 
04-20 09:56:07.441: E/AndroidRuntime(809): ... 11 more 
04-20 09:56:07.441: E/AndroidRuntime(809): Caused by: java.lang.NullPointerException: file 
04-20 09:56:07.441: E/AndroidRuntime(809): at android.net.Uri.fromFile(Uri.java:441) 
04-20 09:56:07.441: E/AndroidRuntime(809): at com.mycompany.myapp.utils.FileUtils.getOutputMediaFileUri(FileUtils.java:19) 
04-20 09:56:07.441: E/AndroidRuntime(809): at com.mycompany.myapp.MyActivity.dispatchCameraIntent(MyActivity.java:56) 
04-20 09:56:07.441: E/AndroidRuntime(809): ... 14 more 
04-20 09:56:10.860: I/Process(809): Sending signal. PID: 809 SIG: 9 
+0

getExternalStoragePublicDirectory는 API 8에서만 사용할 수 있습니다. OS 버전이 낮은 장치에서 응용 프로그램을 테스트하고 있습니까? – Blackbelt

답변

2
+1

쓰기 권한을 추가하면 기본적으로 읽기 권한을 갖게됩니다. http://developer.android.com/reference/android/Manifest.permission.html#READ_EXTERNAL_STORAGE – Raghunandan

+0

안녕하세요, 작동합니다. 그러나 나는 그것이 조금 우스운 이야기다고 당신에게 이야기해야한다. 응용 프로그램이 잘 작동하는 데 사용됩니다. 그렇다면 내 에뮬레이터는 메모리가 충분하지 않아 앱을로드하지 않습니다. 그래서 에뮬레이터를 편집하여 메모리를 추가하고 다시 시작했습니다. 그 이후로 나는 오류를 받기 시작했다. – learner

관련 문제