美文网首页Android
Android 扫描图库

Android 扫描图库

作者: BmobSnail | 来源:发表于2019-01-12 18:52 被阅读0次

    平时选择图片框架用得多了,自然对背后的实现原理感兴趣。
    那么,最基本的应该时遍历图库的文件了吧,在不用任何第三方库的前提下,怎么实现?用到哪些类?具体怎么写?

    1. ContentResolver
    2. Cursor
    

    其实就是跨应用共享数据,这里只需要用到这两个类就可以遍历图库文件了,在此之前顺便复习一下四大组件之一的内容提供者

    ContentProvider简介

    • ContentProvider内容提供者(四大组件之一)主要用于在不同的应用程序之间实现数据共享的功能。

    平时只知其一不知其二,实际上内容提供者除了提供内容的provider以外还有一个解释内容的resolver,当别的应用想对某 ContentProvider 增删改查的操作时,可以通过 ContentResolver 类来完成。

    扫描文件

    扫描文件.PNG

    我们的目标就是拿到以上的数据,至于之后怎么显示在控件上怎么操作就随自由发挥了。ok, talk is cheap, show me the code

    public void scanImages(){
            String[] IMAGES = {
                    MediaStore.Images.Media.DATA,
                    MediaStore.Images.Media.BUCKET_DISPLAY_NAME,
                    MediaStore.Images.Media.MIME_TYPE,
                    MediaStore.Images.Media.SIZE};
            ContentResolver cr = context.getContentResolver();
            Cursor cursor = cr.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,IMAGES,null,null,null);
            if(cursor != null){
                while(cursor.moveToNext()){
                    String path = cursor.getString(0);
                    String bucketName = cursor.getString(1);
                    String mimeType = cursor.getString(2);
                    long size = cursor.getLong(3);
                    Log.i("-->file",path+","+bucketName+","+mimeType+","+size);
                }
                cursor.close();
            }
        }
    

    如果你在跑这段代码抛了异常,而且是permissions异常,那么要学会自己处理了。这里通过上下文就可以获得 ContentResolver 对象了,紧接着是执行了 query 方法,方法里面有5个参数。分别是

    query(
    Uri: using the content:// scheme, for the content to retrieve.
    projection: A list of which columns to return. Passing null will return all columns, which is inefficient.
    selection: A filter declaring which rows to return, formatted as an SQL WHERE clause (excluding the WHERE itself). Passing null will return all rows for the given URI.
    selectionArgs: You may include ?s in selection, which will be replaced by the values from selectionArgs, in the order that they appear in the selection. The values will be bound as Strings.
    sortOrder: How to order the rows, formatted as an SQL ORDER BY clause (excluding the ORDER BY itself). Passing null will use the default sort order, which may be unordered.
    )

    这里Uri是必须传,因为查询得告诉在哪里查起嘛,接下来得几个参数就是根据什么条件来查,一般看情况自己选择,我在这里自定义了一个 IMAGES 传给了第二个参数,意思就是只返回这四个属性回来就好了.

    相关文章

      网友评论

        本文标题:Android 扫描图库

        本文链接:https://www.haomeiwen.com/subject/oapcdqtx.html