注意不能在主线程使用
val cursor = contentResolver.query( //检索的目录 MediaStore.Images.Media.EXTERNAL_CONTENT_URI, //检索数据需要返回的列 如果为null则返回所有列 不建议返回所有列,仅返回我们需要的列即可 //能够使用的列都在MediaStore.Images.Media类中以静态常量的形式定义的 null, //where 条件 "${MediaStore.Images.Media.SIZE} > ?", //where 条件的?占位符的具体参数值 这里限制仅查询大于100KB的文件 arrayOf("100 * 1024"), //排序字段 注意不需要写order by //这里按照文件的创建时间倒序排列 "${MediaStore.Images.Media.DATE_ADDED} desc" ) //移动到的绝对位置 移动到索引为50的位置 //cursor?.moveToPosition(50) //移动的相对值 从当前位置往后移动50个位置 //cursor?.move(50) while (cursor?.moveToNext() == true){ val count = cursor.columnCount for(i in 0 until count){ val columnName = cursor.getColumnName(i) when (val columnType = cursor.getType(i)) { Cursor.FIELD_TYPE_NULL -> { //列为null } Cursor.FIELD_TYPE_INTEGER -> { //列的类型为整型 Log.d(TAG, "$columnName:$columnType=${cursor.getInt(i)}") } Cursor.FIELD_TYPE_FLOAT -> { //列的类型为浮点型 Log.d(TAG, "$columnName:$columnType=${cursor.getFloat(i)}") } Cursor.FIELD_TYPE_STRING -> { //列的类型为字符串 Log.d(TAG, "$columnName:$columnType=${cursor.getString(i)}") } Cursor.FIELD_TYPE_BLOB -> { //列的类型为BLOB 二进制长对象 Log.d(TAG, "$columnName:$columnType=${cursor.getBlob(i)}") } } } Log.d(TAG, "==============================================================") }
一些常用常量 我们想要查看比较详细的常量时可以查看MediaColumns 接口类
MediaStore.Images.Media.SIZE 文件的大小
MediaStore.Images.Media.DATE_ADDED 文件创建时间
MediaStore.Images.Media.DATE_MODIFIED 文件修改时间
MediaStore.Images.Media.DATE_EXPIRES 文件过期时间 (临时文件)
MediaStore.Images.Media._ID 文件的id
MediaStore.Images.Media.MIME_TYPE 文件的mimetype
MediaStore.Images.Media.TITLE 文件名字
MediaStore.Images.Media.DISPLAY_NAME 显示名字
MediaStore.Images.Media.WIDTH 文件宽度
MediaStore.Images.Media.HEIGHT 文件高度
MediaStore.Images.Media.DATE 文件路径