Android获取相机Uri对应图片路径并在ImageView显示异常咨询
问题根因
你出错的核心原因是错误提取并传递了Content URI的路径片段,而非完整的Content URI本身,/external/images/media/174131 只是content://media/external/images/media/174131 这个完整Content URI的路径部分,单独解析路径片段无法被系统识别为合法的MediaStore资源地址,同时setImageURI本身存在主线程IO加载的限制,也容易触发加载失败问题。
可行解决步骤
第一步:传递完整Content URI,不要单独传
getPath()的结果
插入MediaStore得到image_uri后,直接通过Intent传递URI本身,跨页面传递时建议加上临时读取权限标记,避免目标页无权限访问资源:// 发送方Activity代码示例 intent.putExtra("captured_image_uri", image_uri); intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);第二步:目标页正确接收URI,不要做多余的路径解析
// 接收方Activity代码示例 Uri imageUri = getIntent().getParcelableExtra("captured_image_uri");第三步:优先用专业图片加载库加载,避免直接调用
setImageURIsetImageURI会在主线程直接执行IO操作读取图片,很容易出现ANR、大图片加载失败问题,推荐用Glide、Coil等成熟图片库加载:
以Glide为例的代码参考:Glide.with(this) .load(imageUri) .into(targetImageView);如果一定要用原生
setImageURI,需要先校验URI合法性,且确保应用已经获取了对应的存储读取权限。特殊场景兼容:如果必须传字符串形式的URI,不要传
getPath()的结果,要传完整URI的序列化字符串:// 发送方 intent.putExtra("captured_image_uri_str", image_uri.toString()); // 接收方 Uri imageUri = Uri.parse(getIntent().getStringExtra("captured_image_uri_str"));
内容的提问来源于stack exchange,提问作者Shainnah Jane
相关产品推荐
相关产品推荐

