使用ContentResolver查询SD卡中特定的文件

官方定义这个类的主要作用就是,这个类提供了app访问内容模型,直译就是内容解析者的意思,Android通过ContentProvider来实现应用程序间的内容共享,ContentResolver就是来对系统或者我们自定义的ContentProvider进行交互,通常我们用这个类访问的是系统的一些数据,比如 获取通讯录,多媒体文件,以及你想获取的特定的文件。

用法:通过getContentResolver()得到ContentResolver对象

然后调用它的query(uri,projection, selection, selectionArgs, sortOrder)方法来查询,其实感觉和查询数据库操作差不多

首先uri代表你要查找文件的uri,比如音频(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI)

视频(MediaStore.Video.Media.EXTERNAL_CONTENT_URI)

通讯录(ContactsContract.Contacts.CONTENT_URI)

如果你这里想要查询特定文件的话,或者你不知道你要查询的uri是什么,Android提供了一个

MediaStore.Files.getContentUri("str"),就是这个Files类,源码解释说这个就是调用(text,html等等这些文件的)

projection:查询的列,不过滤填null

selection:相当于数据库的 where参数 不过滤填null

selectionArgs:如果selection中有?,这里可以填写实际值来代替? 没有填null

sortOrder:查询的结果按照什么来排序 不过滤填null

query方法返回一个Cursor,然后进行解析,

最近正好在做一个需要查询内存卡中所有txt文件的东西,刚开始想的是使用递归遍历,因为我是遍历一个文件夹刷新一次ui,然后导致ui刷新太快,经常会抛

The content of the adapter has changed but ListView did not receive a notification. 这个异常,然后感觉还是老实的用系统提供的方法吧

贴一个我查询sd卡中txt文件的代码

ContentResolver resolver = this.getContentResolver();
//txt mime_type = text/plain
        Cursor cursor = resolver.query(MediaStore.Files.getContentUri("external"),null,"mime_type=\"text/plain\"", null, null);
        if (cursor != null){
            while (cursor.moveToNext()){
                String title = cursor.getString(cursor.getColumnIndex(MediaStore.Files.FileColumns.TITLE));
                String path = cursor.getString(cursor.getColumnIndex(MediaStore.Files.FileColumns.DATA));
                int fileLength = cursor.getInt(cursor.getColumnIndex(MediaStore.Files.FileColumns.SIZE));
                //这里添加自己想要进行的操作可以了
            }
        }


已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页