Android Q - Доступ к внешнему хранилищу (FileNotFoundException) запрещен - PullRequest
0 голосов
/ 24 сентября 2019

Мое приложение имеет функцию, которая позволяет загружать и скачивать фотографии (по одной за раз).У меня нет проблем с пирогом и старше (minSdk 21).Однако после обновления приложения для Android Q я больше не могу делать фотографии или загружать фотографии.Я постоянно получаю FileNotFoundException:

java.io.FileNotFoundException: /storage/emulated/0/Pictures/mydirectory/IMG_20190924_135818.jpg: open failed: EACCES (Permission denied)

Загрузка

File dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
File downloadedPhoto = FileUtils.createFile(dir, photoDto.getFileName(), photoDto.getBytes());

Загрузка с использованием камеры

Uri contentURI = FileProvider.getUriForFile(PhotosActivity.this, BuildConfig.FILE_PROVIDER_AUTHORITY, PhotoUtils.getPhotoUploadCameraImageTemporaryFile(getFilesDir()));

try (Cursor cursor = getContentResolver().query(contentURI, null, null, null, null, null)) {
    if (cursor != null && cursor.moveToFirst()) {
        int sizeIndex = cursor.getColumnIndex(OpenableColumns.SIZE);
        String size = cursor.isNull(sizeIndex) ? "Unknown" : cursor.getString(sizeIndex);
        String fileType = getContentResolver().getType(contentURI);

        File dir = PhotoUtils.getPhotoAlbumDirectory(PhotosActivity.this);
        File capturedImageFile = PhotoUtils.createPhotoUploadFile(dir);
        PhotoUtils.copyPhotoToTemporaryFile(PhotosActivity.this, contentURI, dir, capturedImageFile);
....

FYIИсключение происходит при создании загруженного файла и при копировании во временный файл. Я вижу, что метод getExternalStoragePublicDirectory устарел, поэтому я предполагаю, что это является частью проблемы.Есть предложение заменить его на getExternalFilesDir, но мне нужно убедиться, что фотографии остаются на устройстве, если пользователь удаляет приложение.У меня также есть разрешения на чтение / запись во внешнее хранилище и предоставлена ​​камера, поэтому я не верю, что это связано с этим.

Я пытаюсь найти примеры того, как перейти на «новый путь», ноМне тяжело.Даже ссылка на документы с ограниченным доступом на сайте Android возвращает 404. Судя по тому, что я прочитал, мне кажется, что мне нужно перейти на использование MediaStore, но поиск учебника также оказывается трудным.

Кто-нибудь может указать мне правильное направление?

...