ContentResolver 简单使用
注意不能在主线程使用
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 文件路径
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端