注意不能在主線程使用
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 文件路徑