我正在努力解决文件保存问题。
我有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();
我会感激任何帮助和建议。
答案 0 :(得分:0)
从您的代码中,您尝试将文件存储在外部存储中。看来经验丰富的用户没有SD卡。