我試圖拍攝一張照片並將其保存到應用程序的內部緩存中,因爲一旦它上傳,它將被刪除。我使用下面的代碼來創建文件:Android內部緩存中的「java.io.FileNotFoundException:Permission denied」Dir
public static File createInternalCacheImageFile(Context context, String imageFileName) throws IOException {
return File.createTempFile(
imageFileName,
context.getString(R.string.image_extension),
context.getCacheDir()
);
}
與根權限的文件管理器,檢查顯示該文件被創建的罰款。然後我使用以下代碼來啓動照相機意圖,這將在圖像通常保存到我創建該文件:
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(imageFile));
activity.startActivityForResult(takePictureIntent, REQUEST_CODE_IMAGE_CAPTURE);
相機活性顯示並接受畫面後,活動的結果爲0。當在logcat
看以下所示:
07-21 13:19:51.093 12889-12889/? E/CAM_StateSavePic﹕ exception while saving result to URI: Optional.of(file:///data/data/org.serengetitracker.androidapp/cache/image_random_205854910-2018234447.jpg)
java.io.FileNotFoundException: Permission denied
at android.os.Parcel.openFileDescriptor(Native Method)
at android.os.ParcelFileDescriptor.openInternal(ParcelFileDescriptor.java:253)
at android.os.ParcelFileDescriptor.open(ParcelFileDescriptor.java:199)
at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:916)
at android.content.ContentResolver.openOutputStream(ContentResolver.java:686)
at android.content.ContentResolver.openOutputStream(ContentResolver.java:662)
at com.android.camera.captureintent.state.StateSavingPicture.onEnter(StateSavingPicture.java:84)
at com.android.camera.captureintent.stateful.StateMachineImpl.jumpToState(StateMachineImpl.java:62)
at com.android.camera.captureintent.stateful.StateMachineImpl.processEvent(StateMachineImpl.java:110)
at com.android.camera.captureintent.state.StateOpeningCamera$9.onClick(StateOpeningCamera.java:307)
at android.view.View.performClick(View.java:4780)
at android.view.View$PerformClick.run(View.java:19866)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
爲什麼我不能圖像寫入應用程序的內部緩存目錄?
注意:我在我的應用程序中擁有android.permission.WRITE_EXTERNAL_STORAGE
權限,但這應該不重要,因爲我沒有處理外部存儲。
而不是在緩存中創建圖像嘗試在你的'data/data/org.serengetitracker.androidapp/images'中創建 –