Отказано в разрешении при сохранении изображения в android - PullRequest
0 голосов
/ 19 февраля 2020

Я не могу сохранить файл изображения даже после запроса разрешения. Я добавил разрешение в файл манифеста следующим образом:

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)

Ответы [ 2 ]

2 голосов
/ 19 февраля 2020

На Android 9 вам необходимо запросить разрешение во время выполнения, которое, я думаю, вы делаете неправильно (см. https://developer.android.com/training/permissions/requesting.html)

И на Android 10 путей к файлам вне Личные каталоги вашего приложения бесполезны.

В дальнейшем, вероятно, лучше всего использовать Media Store или Storage Access Framework

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

Media Магазин, вероятно, лучше в вашем случае. https://developer.android.com/training/data-storage/shared/media

1 голос
/ 19 февраля 2020

Проверьте, является ли это последовательностью того, как изменились разрешения в Android Q:

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

...