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
相关产品推荐
相关产品推荐

