【问题标题】:Permission denied when saving an image in android在android中保存图像时权限被拒绝
【发布时间】:2020-06-04 01:30:54
【问题描述】:

即使我请求了权限,我也无法保存图像文件。 我将权限添加到清单文件中,如下所示:

permission.WRITE_EXTERNAL_STORAGE

但我一直看到这个错误:

权限被拒绝

以下是相关代码:

@SuppressLint("MissingPermission")
private void saveImage() {
    if (requestPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
        showLoading("Saving...");
        File file = new File(Environment.getExternalStorageDirectory()
                + File.separator + ""
                + System.currentTimeMillis() + ".png");
        try {
            file.createNewFile();

            SaveSettings saveSettings = new SaveSettings.Builder()
                    .setClearViewsEnabled(true)
                    .setTransparencyEnabled(true)
                    .build();

            mPhotoEditor.saveAsFile(file.getAbsolutePath(), saveSettings, new PhotoEditor.OnSaveListener() {
                @Override
                public void onSuccess(@NonNull String imagePath) {
                    hideLoading();
                    showSnackbar("Image Saved Successfully");
                    mSaveImageUri = Uri.fromFile(new File(imagePath));
                    mPhotoEditorView.getSource().setImageURI(mSaveImageUri);
                }

                @Override
                public void onFailure(@NonNull Exception exception) {
                    hideLoading();
                    showSnackbar("Failed to save Image");
                }
            });
        } catch (IOException e) {
            e.printStackTrace();
            hideLoading();
            showSnackbar(e.getMessage());
        }
    }
}

这是错误日志:

D/ViewRootImpl@faa5b66[EditImageActivity]: setView = com.android.internal.policy.DecorView@63d69b7 TM=true MM=false
W/System.err: java.io.IOException: Permission denied
W/System.err:     at java.io.UnixFileSystem.createFileExclusively0(Native Method)
        at java.io.UnixFileSystem.createFileExclusively(UnixFileSystem.java:317)

【问题讨论】:

  • 你在哪个安卓版本上运行?
  • @Andrew 在 Android 9 和 10 上

标签: java android permissions android-permissions


【解决方案1】:

检查Android Q中的权限变化是否连续:

https://developer.android.com/training/data-storage/files/external-scoped

【讨论】:

    【解决方案2】:

    在 Android 9 上,您需要请求运行时权限,但我认为您做得不对(请参阅 https://developer.android.com/training/permissions/requesting.html

    在 Android 10 上,您应用的私有目录之外的文件路径毫无价值。

    今后最好只使用媒体存储或存储访问框架

    https://developer.android.com/training/data-storage/shared

    媒体商店在您的情况下可能更好。 https://developer.android.com/training/data-storage/shared/media

    【讨论】:

      猜你喜欢
      • 2015-08-22
      • 1970-01-01
      • 2018-04-13
      • 2017-03-15
      • 1970-01-01
      • 1970-01-01
      • 2020-01-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多