目前项目中要做一个自定义拍照生成照片和选取系统照片来进行图片文件批处理的业务,为了兼容高版本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!!)
}
}