[英]File saving issue to public storage directory
我正在努力解決文件保存問題。
我有2個功能:
對於第一部分(文件保存),我使用
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 90, stream);
byte[] byteArray = stream.toByteArray();
final File file = new File(getAlbumStorageDir(context, Settings.ALBUM),
Settings.FILENAME_PREFIX + id + + ".jpg");
return saveDataToFile(byteArray , file);//writes bytes to file
public static File getAlbumStorageDir(Context context, String albumName) {
// Get the directory for the app's private pictures directory.
File file = new File(context.getExternalFilesDir(
Environment.DIRECTORY_PICTURES), albumName);
if (!file.mkdirs()) {
Log.e("LOG_TAG", "Directory not created");
}
return file;
}
第二部分,我將文件從1到公共存儲目錄,並使其在圖庫中可用
File storageDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), Settings.CAMERA_IMAGES_DIR + "/");
if (!storageDir.exists())
storageDir.mkdir();
File copyFile = new File(storageDir, fileToCopy.getName());
try {
copyFile.createNewFile();
copy(fileToCopy, copyFile);// writes bytes from one file to another
Uri finalUri = Uri.fromFile(copyFile);
galleryAddPic(finalUri, context);
} catch (java.io.IOException e) {
Crashlytics.logException(e);
}
public static void galleryAddPic(Uri contentUri, Context context) {
Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, contentUri);
context.sendBroadcast(mediaScanIntent);
}
在我和其他大多數情況下,這都可以正常工作。
但是某些用戶收到以下錯誤:
Caused by java.io.IOException: open failed: ENOENT (No such file or directory)
at java.io.File.createNewFile(File.java:942)
at com.testapp.utils.Utils.copyImageFile(Utils.java:311)
at com.testapp.utils.Utils.savePhoto(Utils.java:420)
at com.testapp.fragments.PictureListFragment$3$4.onAction(PictureListFragment.java:297)
at com.testapp.views.PictureOverlayView$5.onClick(PictureOverlayView.java:145)
at android.view.View.performClick(View.java:5721)
at android.view.View$PerformClick.run(View.java:22620)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:7406)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
我檢查了一下,這些用戶都有寫外部權限。
在這種情況下,StorageDir看起來像/ storage / emulated / 0 / Pictures / album。 storageDir.mkdir()返回false,並且該目錄不存在。 問題出現在此步驟上:
copyFile.createNewFile();
我將不勝感激任何幫助和建議。
從您的代碼,您正在嘗試將文件存儲在外部存儲中。 似乎經歷過的用戶沒有SD卡。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.