/**
* 从本地获取相册列表
* @param context
* @param pageIndex 从1开始
* @param pageSize 页码大小
*/
suspend fun getLocalAlbumList(context: Context, pageIndex: Int = 1, pageSize: Int = 20):MutableList<AlbumModel> {
// 获得图片
kotlin.runCatching {
val list = ArrayList<AlbumModel>()
val uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI
val projection = arrayOf(
MediaStore.Images.Media.DATA,
MediaStore.Images.Media.DATE_TAKEN
)
var cursor:Cursor? = null
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
val bundle = Bundle().apply {
putInt(ContentResolver.QUERY_ARG_LIMIT,pageSize)
putInt(ContentResolver.QUERY_ARG_OFFSET, (pageIndex - 1) * pageSize)
//按时间进行降序查询
putStringArray(ContentResolver.QUERY_ARG_SORT_COLUMNS, arrayOf(MediaStore.Images.Media.DATE_TAKEN))
putInt(ContentResolver.QUERY_ARG_SORT_DIRECTION, ContentResolver.QUERY_SORT_DIRECTION_DESCENDING)
}
cursor = context.contentResolver.query(uri, projection, bundle, null)
} else {
val sortOrder = MediaStore.Images.Media.DATE_TAKEN + " DESC " // 按照日期降序排
// 计算偏移量
val offset: Int = (pageIndex - 1) * pageSize
// 查询图片
cursor = context.contentResolver.query(
uri,
projection,
null,
null,
"$sortOrder LIMIT $pageSize OFFSET $offset"
)
}
if(BuildConfig.DEBUG){
if (cursor == null){
Log.i(TAG, "getLocalAlbumList--->cursor 是空的");
}
}
if (cursor!=null){
while (cursor.moveToNext()) {
val path = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA))
val date = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATE_TAKEN))
val model = AlbumModel()
model.path = path
list.add(model)
if(BuildConfig.DEBUG){
Log.i(TAG, "getLocalAlbumList--->图片地址:${path},日期:${date}");
}
}
}
cursor?.close()
return list
}.onFailure {
it.printStackTrace()
}
return mutableListOf()
}
网友评论