Android通过Intent传递多Uri

这篇博客探讨了在Android应用中如何处理和传递多个Uri,以实现照片文件的批处理。作者遇到了使用intent的putParcelableArrayListExtra方法传递Uri列表的问题,并找到了一种解决方案:通过ClipData设置和获取Uri列表。此方法适用于兼容高版本Android系统,解决了跨页面传递多Uri的挑战。
摘要由CSDN通过智能技术生成

目前项目中要做一个自定义拍照生成照片和选取系统照片来进行图片文件批处理的业务,为了兼容高版本Android,所以一直操作的照片文件为Uri格式,再通过Uri来进行真实图片读取。

在这个过程中不免要跨页面进行多Uri来进行传递,刚开始想到的是intent的putParcelableArrayListExtra方法来存储,因为Uri自带实现了Parcelable接口,后来发现这个方式行不通,在查资料后,借鉴调用系统相机拍照和打开系统选择文件的操作,找到如下方法:

设值

fun setListUriExtra(intent: Intent, data: List<Uri>) {
	if (data.isNotEmpty()) {
		if (data.size == 1) {
			intent.data = data[0]
		} else {
			val clipData = ClipData.newRawUri("", data[0])
			for (i in 1 until data.size) {
				clipData.addItem(ClipData.Item(data[i]))
				intent.clipData = clipData
			}
		}
	}
}

取值

fun getListUriExtra(intent: Intent): List<Uri> {
	return if (intent.data == null) {
		val uriList = mutableListOf<Uri>()
		intent.clipData?.let {
			for (i in 0 until it.itemCount) {
				uriList.add(it.getItemAt(i).uri)
			}
		}
		uriList
	} else {
		listOf(intent.data!!)
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值