Search code examples
androidandroid-gallerymediastoreandroid-contentresolver

How query images/videos in custom folders using ContentResolver in Android?


I have a custom folder in the Pictures directory, like thisPictures/MyFolder. It has images in MyFolder. Here is how to query the images using ContentResolver on MyFolder folder only.

I tried this

Cursor mediaCursor = context.getContentResolver().query(
                MediaStore.Files.getContentUri("external"),
                null,
                MediaStore.MediaColumns.RELATIVE_PATH + " like ? ",
                new String[]{"%MyFolder%"},
                null);

But it contains other files also. Or is any alternate to content resolver?


Solution

  • You can use the below function to get the images from the folder.

    private void getImageFolderList() {
        String[] projection = new String[] { MediaStore.Images.Media.DATA,
                        MediaStore.Images.Media._ID,
                        MediaStore.Images.Media.BUCKET_DISPLAY_NAME,
                        MediaStore.Images.Media.DATE_TAKEN };
                Uri images = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
                final String orderBy = MediaStore.Images.Media.DATE_TAKEN;
                Cursor cur = getContentResolver().query(images, projection, // Which
                                                                            // columns
                                                                            // to return
                        null, // Which rows to return (all rows)
                        null, // Selection arguments (none)
                        orderBy + " DESC" // Ordering
                );
                ArrayList<String> imagePath;
                if (cur.moveToFirst()) {
                    String bucket, date;
                    int bucketColumn = cur.getColumnIndex(MediaStore.Images.Media.BUCKET_DISPLAY_NAME);
                    int dateColumn = cur.getColumnIndex(MediaStore.Images.Media.DATE_TAKEN);
                    do {
                        bucket = cur.getString(bucketColumn);
                        date = cur.getString(dateColumn);
                        if (!allFolder.contains(bucket)) {
                            allFolder.add(bucket);
                        }
                        imagePath = listImageByFolder.get(bucket);
                        if (imagePath == null) {
                            imagePath = new ArrayList<String>();
                        }
                        imagePath.add(cur.getString(cur
                                .getColumnIndex(MediaStore.Images.Media.DATA)));
                        listImageByFolder.put(bucket, imagePath);
                    } while (cur.moveToNext());
                }
        }