Android Q-外部存储(FileNotFoundException)访问被拒绝

时间:2019-09-24 20:34:55

标签: android android-permissions filenotfoundexception android-fileprovider

我的应用程序具有允许上传和下载照片(一次一张)的功能。我对Pie和更老的版本(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);
....

仅供参考,在创建下载的文件以及复制到临时文件时会发生异常。我看到getExternalStoragePublicDirectory现在已被弃用,因此我认为这是问题的一部分。有建议用getExternalFilesDir替换它,但是如果用户卸载应用程序,我需要确保照片仍在设备上。我还拥有读取/写入外部存储和相机的权限,因此我认为这与之无关。

我正在尝试查找有关如何迁移到“新方式”的示例,但是我遇到了困难。甚至到Android网站上“范围访问”文档的链接也返回404。据我所读,似乎我需要迁移到使用MediaStore,但事实证明,查找教程也很困难。

有人能指出我正确的方向吗?

0 个答案:

没有答案