You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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");
    
  • 第三步:优先用专业图片加载库加载,避免直接调用setImageURI
    setImageURI 会在主线程直接执行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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 21:06:04