【问题标题】:How to get Count of Items in a Folder using MediaStore Android如何使用 MediaStore Android 获取文件夹中的项目数
【发布时间】:2021-07-19 17:57:12
【问题描述】:

我有一个目录,里面有图片。我想知道如何使用 MediaStore 从该文件夹中获取图像数量。我尝试使用 COUNT 关键字,但 AndroidQ 不支持。另外请告知是否有其他有效的方法。

【问题讨论】:

    标签: android mediastore


    【解决方案1】:

    请试试这个方法

     private static int getCount(@NonNull final Context context, @NonNull final Uri contentUri, @NonNull final String bucketId)
        {
            try (final Cursor cursor = context.getContentResolver().query(contentUri,
                    null, MediaStore.Video.Media.BUCKET_ID + "=?", new String[]{bucketId}, null))
            {
                return ((cursor == null) || (cursor.moveToFirst() == false)) ? 0 : cursor.getCount();
            }
        }
    
    
    
    final HashMap<String, AlbumQuery.Album> output = new HashMap<>();
            final Uri contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
            final String[] projection = {MediaStore.Video.VideoColumns.BUCKET_ID,MediaStore.Video.VideoColumns.BUCKET_DISPLAY_NAME,MediaStore.Video.VideoColumns.DATA};
            try (final Cursor cursor = context.getContentResolver().query(contentUri, projection, null, null, null))
            {
                if ((cursor != null) && (cursor.moveToFirst() == true))
                {
                    final int columnBucketName = cursor.getColumnIndexOrThrow(MediaStore.Video.Media.BUCKET_DISPLAY_NAME);
                    final int columnBucketId   = cursor.getColumnIndexOrThrow(MediaStore.Video.Media.BUCKET_ID);
                    do
                    {
                        final String bucketId   = cursor.getString(columnBucketId);
                        final String bucketName = cursor.getString(columnBucketName);
                        if (output.containsKey(bucketName) == false)
                        {
                            final int count = AlbumQuery.getCount(context, contentUri, bucketId);
                            //output.put(bucketName, album);
                        }
    
                    } while (cursor.moveToNext());
                }
            }
    
    
    
    
    **Another way**
    
     fun count(dir: File) {
            try {
                if (dir.isDirectory) {
                    if(!dir.name.equals(AppConstants.MASK_DIR_LOCAL) && !dir.name.equals(DIR1) && !dir.name.equals(DIR2) ){
                        val children = dir.list()
                        for (i in children.indices) {
                            //File(dir, children[i])
                                count++;
                        }
                    }
                }
            }catch (e:java.lang.Exception){
                e.printStackTrace()
            }
        }
    

    【讨论】:

    • 从哪里获取bucketId?
    • Bucket id 位于 mediastore.video.media.bucketid 中,您可以将其放入与 contentresolver.query 一起使用的投影数组中,并使用 cursor.columnindexid 和 cursor.getstring 获取
    • 您能否更新上述代码以复制您所说的内容。有点不清楚。
    • 请检查代码行,我已经更新了
    • 哪个效率更高:MediaStore 还是迭代搜索?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-15
    相关资源
    最近更新 更多