簡體   English   中英

文件保存到公共存儲目錄的問題

[英]File saving issue to public storage directory

我正在努力解決文件保存問題。

我有2個功能:

  1. 拍攝照片並保存圖片
  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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM