android使用kotlin遍历相册把图片按日期分组保存到list集合
时间: 2023-12-13 08:04:09 浏览: 160
以下是使用 Kotlin 遍历相册并按日期分组保存到 List 集合的示例代码:
```kotlin
data class Image(val id: Long, val dateTaken: Long, val path: String)
fun getImages(context: Context): List<List<Image>> {
val images = mutableListOf<Image>()
val projection = arrayOf(
MediaStore.Images.Media._ID,
MediaStore.Images.Media.DATE_TAKEN,
MediaStore.Images.Media.DATA
)
val cursor = context.contentResolver.query(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
projection,
null,
null,
MediaStore.Images.Media.DATE_TAKEN + " DESC"
)
if (cursor != null) {
val idColumn = cursor.getColumnIndexOrThrow(MediaStore.Images.Media._ID)
val dateTakenColumn = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATE_TAKEN)
val pathColumn = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA)
while (cursor.moveToNext()) {
val id = cursor.getLong(idColumn)
val dateTaken = cursor.getLong(dateTakenColumn)
val path = cursor.getString(pathColumn)
images.add(Image(id, dateTaken, path))
}
cursor.close()
}
return images.groupBy { image ->
val calendar = Calendar.getInstance()
calendar.timeInMillis = image.dateTaken
calendar.clear(Calendar.HOUR_OF_DAY)
calendar.clear(Calendar.MINUTE)
calendar.clear(Calendar.SECOND)
calendar.clear(Calendar.MILLISECOND)
calendar.timeInMillis
}.values.toList()
}
```
该函数返回一个 `List<List<Image>>` 类型的对象,其中每个内部 List 表示同一日期的图片列表。注意,上述代码使用了 `data class` 来定义 `Image` 类型,方便之后的比较和操作。
阅读全文