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

Android中如何在Activity间传递图片并在目标页面显示?

解决Android中相册图片URI跨Activity传递并显示的问题

用ActivityResultContracts.GetContent()获取的图片URI多为content://协议格式,直接通过常规Intent传递后,第二个Activity会因权限不足无法访问资源,导致图片无法显示。以下是可行的解决方案:

步骤1:在第一个Activity中传递URI并授予临时权限

修改图片获取后的回调逻辑,启动第二个Activity时将URI放入Intent,同时添加临时读取权限授权:

val getContent = registerForActivityResult(ActivityResultContracts.GetContent()) { uri: Uri? ->
    uri ?: return@registerForActivityResult
    // 构造跳转Intent并传入URI
    val intent = Intent(this, SecondActivity::class.java)
    intent.putExtra("IMAGE_URI", uri)
    // 授予临时读取权限,确保第二个Activity能访问该URI资源
    intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
    startActivity(intent)
}

val button = findViewById<Button>(R.id.button)
button.setOnClickListener {
    getContent.launch("image/*")
}

步骤2:在第二个Activity中接收URI并显示图片

在第二个Activity的onCreate方法中,从Intent取出URI并设置给ImageView:

class SecondActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_second)
        
        val imageView = findViewById<ImageView>(R.id.second_image_view)
        val imageUri = intent.getParcelableExtra<Uri>("IMAGE_URI")
        
        imageUri?.let {
            imageView.setImageURI(it)
        }
    }
}

关键注意事项

  • 必须添加Intent.FLAG_GRANT_READ_URI_PERMISSION:content://类型的URI属于其他应用(如相册)的私有资源,当前App需要通过临时授权让第二个Activity获得访问权限。
  • 禁止直接传递Bitmap:Bitmap占用内存大,跨Activity传递极易触发TransactionTooLargeException,传递URI是更高效安全的方案。
  • 空值判断:务必处理URI为空的情况,避免空指针异常。

内容的提问来源于stack exchange,提问作者Theekshana Vimukthi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 19:01:16