android10加载图片问题解决思路全程记录 FileNotFoundException: /content:/media/external/images
在网上找到一段代码跑在android 10上,加载相册图片失败该怎么解决?
1、首先确认已经给了相应权限
2、跟踪加载图片的代码
Cursor cursor = getApplicationContext().getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, projection,null, null, MediaStore.Images.Media.DATE_ADDED);
打印日志发现这个写法正确、可以获取6张图片,既然读取图片没有问题,那就继续往下
3、看显示图片的代码
Glide.with(context).load(arrayList.get(position).cover).placeholder(R.drawable.image_placeholder).centerCrop().into(viewHolder.imageView);
原来用的是Glide加载,那为什么不行呢?网络搜索下 Android 10 Glide,找到结果如下
https://github.com/bumptech/glide/issues/3896 核心内容如下
issue:
on Android 10 , Glide failed to load image from local storage.fix for above issue
android:requestLegacyExternalStorage="true"
就是说在application加入android:requestLegacyExternalStorage="true"就可以解决
4、requestLegacyExternalStorage
进一步查询这个requestLegacyExternalStorage的作用,你就会知道更底层一些的知识。
#######################################
再说一个错误
FileNotFoundException: /content:/media/external/images
参考文章
https://blog.csdn.net/dickyqie/article/details/105120866
https://stackoverflow.com/questions/6935497/android-get-gallery-image-uri-path
https://stackoverflow.com/questions/3401579/get-filename-and-path-from-uri-from-mediastore
https://zhuanlan.zhihu.com/p/128558892
简单分析下
高版本采用MediaStore来管理文件、增删改查都可以用这个。说一个常见的应用场景,那就是读取手机相册里面的图片。我们调用相册读取的图片路径是一个uri,类似这样子的
content://media/external/images/media/379
我们需要先转为图片真实的路径才可以读取。图片真实的路径长什么样?
/storage/emulated/0/DCIM/Camera/394210ccb4c70757ee9e74da852f6c65.jpg
那怎么转换呢,这时候就要用到MediaStore帮助我们。简单说,MediaStore就是一个文件数据库,手机上的文件都记录在这个库里。我们看转换代码
public static String getRealPathFromURI(Context context, Uri contentUri) {Cursor cursor = null;try {String[] proj = { MediaStore.Images.Media.DATA };cursor = context.getContentResolver().query(contentUri, proj, null, null, null);int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);cursor.moveToFirst();return cursor.getString(column_index);}catch (Exception e){e.printStackTrace();return null;}finally {if (cursor != null) {cursor.close();}}}
网上其他资料一般到这里就完了,但是我这么写了,还是取不到。进一步研究发现,MediaStore在获取文件的时候需要用到provider,在application需要添加如下代码
<providerandroid:name="androidx.core.content.FileProvider"android:authorities="${applicationId}.fileprovider"android:exported="false"android:grantUriPermissions="true"tools:replace="android:authorities"><meta-dataandroid:name="android.support.FILE_PROVIDER_PATHS"android:resource="@xml/file_paths" /></provider>
android10加载图片问题解决思路全程记录 FileNotFoundException: /content:/media/external/images相关推荐
- web项目中js加载慢问题解决思路
web项目中js加载慢问题解决思路 参考文章: (1)web项目中js加载慢问题解决思路 (2)https://www.cnblogs.com/cslj2013/p/8491786.html 备忘一下 ...
- 微信小程序中使用wxss加载图片并实现动画
微信小程序中使用wxss加载图片并实现动画 记录微信小程序中使用wxss加载图片并实现动画的方式,最终实现loading效果. 代码 .weui-loading { margin: 0 5px; wi ...
- Android加载图片内存溢出问题解决方法
这篇文章主要介绍了Android加载图片内存溢出问题解决方法,本文讲解使用BitmapFactory.Options解决内存溢出问题,需要的朋友可以参考下 1. 在Android软件开发过程中,图片处 ...
- Glide4.7加载图片RoundedCorners跟CenterCrop冲突问题解决
Glide加载图片时需要设置CenterCrop跟RoundedCorners时需要用到RequestOptions的transforms方法 单个设置时后面的设置的会覆盖前面设置的 如: new R ...
- [置顶] 异步加载图片,使用LruCache和SD卡或手机缓存,效果非常的流畅
转载请注明出处http://blog.csdn.net/xiaanming/article/details/9825113 异步加载图片的例子,网上也比较多,大部分用了HashMap<Strin ...
- Android ListView异步加载图片乱序问题,原因分析及解决方案
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/45586553 在Android所有系统自带的控件当中,ListView这个控件算是 ...
- ajax静态加载图片,JQuery实现Ajax加载图片的方法
本文实例讲述了JQuery实现Ajax加载图片的方法.分享给大家供大家参考,具体如下: 最近在学习JQuery,想从原理上模拟一下无刷新的相册浏览. 最先想到的思路是利用缓存,也就是先显示提示消息,然 ...
- 游戏UI动态加载图片优化
说到UI优化,很多人对其并不以为意,UI的制作无非使用UGUI或者NGUI.UI优化主要是针对图集,还有一些依赖项的优化,针对的是内存优化,上面这些都是关于静态UI的优化,这个是作为程序员都要经历的阶 ...
- android studio 加载图片,Android Studio 加载网络图片
Android Studio是基于gradle的一个Android开发软件,在引用网络图片的时候需要连接第三方库,这里介绍 引用glide的方法. 一.在github页面搜索glide,点击第一个 二 ...
最新文章
- linux 重新加载驱动程序,在linux中模拟设备驱动程序崩溃。让python重新加载i
- 当网络安全遇上大数据分析(9)
- 【Android 安装包优化】使用 lib7zr.so 动态库处理压缩文件 ( 修改 7zr 交叉编译脚本 Android.mk | 交叉编译 lib7zr.so 动态库 )
- 随机分配座位,共50个学生,使学号相邻的同学座位不能相邻
- Python-按照list中dict的某个key进行排序
- gsettings-desktop-schemas : 破坏: mutter (< 3.31.4) 但是 3.28.4-0ubuntu18.04.2 正要被安装解决方案
- java基础教程哪个好,面试必会
- 中国首部智能交通微纪录片正式发布 探讨交通强国高质量发展路径
- python list 底层_深入Python列表的内部实现
- PaddlePaddle飞桨OCR文本检测——入门安装GPU版(一)
- 列表框、下拉列表框或组合框与数据库
- Atitit 项目wechat微信截屏生成vcf通讯录384 个 384个人 42个节拍,平均每个8个人 技术点 im图像裁剪, ocr Tesseract Vcf格式 /wechatTel
- java后台json集合传前台js
- 特征值和特征向量的作用
- java 累加函数_请你编写一个方法(函数),功能要求从参数x累加到y,并返回累加后的整数结果。...
- File “/etc/oratab“ is not accessible.
- 跨平台第三方平台登录和单点登录
- 服务器上如何查看日志记录
- 【场景】JMeter并发线程组 Concurrency Thread Group 阶梯式加压
- 淘宝天猫整店店铺商品API,店铺商品分类接口代码教程