无法在 Android 10 (Q) 中使用滑行从设备加载图像

Unable to load image from device using glide in Android 10 (Q)

Glide 未加载从图库中选取的图像。 尽管给予了写入和读取权限,它总是显示以下错误。

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

添加此行 android 清单

android:requestLegacyExternalStorage="true"

没有图库应用程序会为您提供该文件路径。

所以你一直在摆弄像 getRealPathFromUri() 这样的东西。

这不会在 Q 上执行,因为没有人可以访问该图片路径。

最好直接使用获取的uri

你也应该在 Q 下面这样做。

创建文件实例并传递要加载到 ImageView 的文件的 uri 失败时也可以使用 RequestListener 追踪错误

 Glide.with(context)
        .load(new File(fileUri.getPath())) // Uri of the picture
        .into(imageview)
        .listener(new RequestListener<String, GlideDrawable>() {
        @Override
        public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
            Log.e("xmx1","Error "+e.toString());
            return false;
        }

        @Override
        public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
            Log.e("xmx1","no Error ");
            return false;
        }
    });

确保您已添加

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 

在您的应用程序标签内```

<application
android:name=".App"
android:allowBackup="false"
android:icon="@mipmap/ic_launcher"
android:requestLegacyExternalStorage="true"
... >

你必须传递相关的uri,而不是路径,

 Glide.with(context).load(model.photoUri).into(image)

这样就不需要添加了

android:requestLegacyExternalStorage="true"

在您的清单文件中。