升级Android Q之路遇到的坑-本地相册图片加载

从Android 10开始,我们访问应用程序外部文件的方式发生了轻微的变化。这种行为的改变来自于作用域存储的概念,它旨在提高用户文件的保密性,在android系统中添加更多的文件访问控制。

在安卓Q以前版本选取相册后会获取到照片的Uri和绝对路径(以下简称Path),然后用Glide去加载图片就可以显示在Imageview上面,但是在Android 10(API 级别 29)及更高版本为目标平台的应用在默认情况下被赋予了对外部存储设备的分区访问权限(即分区存储)。此类应用只能看到本应用专有的目录(通过 Context.getExternalFilesDir() 访问)以及特定类型的媒体。通俗的讲就是本应用访问本应用的文件不需要权限可自由访问,在访问其他应用的文件时比如手机相册,不仅需要READ_EXTERNAL_STORAGE权限还要使ContentResolver.openFile()

从相册获取到图片的Uri后要获取到图片的路径,在Android Q以前获取地址的方式为

  Cursor cursor = null;
  final String column = MediaStore.MediaColumns.DATA;
  final String[] projection = {
   
   column};
  String path = "";
  cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs, null);
            if (cursor != null && cursor.moveToFirst()) {
   
   
                final int columnIndex = cursor.getColumnIndexOrThrow(column);
                path = cursor.getString(columnIndex);
            }

path就是图片的地址。
但是在安卓Q上面虽说能获取到图片的地址,但是用Glide去加载那就是空白的图片,因为从Q开始MediaStore.MediaColumns.DATA被弃用。
所以在获取图片地址的时候要分版本。代码如下

if (android.os.Build.VERSION.SDK_INT <</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值