【问题标题】:How query images/videos in custom folders using ContentResolver in Android?如何在 Android 中使用 ContentResolver 查询自定义文件夹中的图像/视频?
【发布时间】:2021-08-04 15:46:43
【问题描述】:

我在Pictures 目录中有一个自定义文件夹,例如Pictures/MyFolder。它在MyFolder 中有图像。以下是仅在 MyFolder 文件夹上使用 ContentResolver 查询图像的方法。

我试过了

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

但它也包含其他文件。还是内容解析器的替代品?

【问题讨论】:

  • It has images in MyFolder. 你应该开始告诉谁把这些图片放在那里以及如何放在那里。
  • But it contains other files also. 什么意思?其他应用程序是否也将图像放在那里?并且使用 getContentResolver 是无关紧要的。您正在查询 MediaStore。
  • 感谢@blackapps 的回复,我使用File imageFolder = new File(Environment.DIRECTORY_PICTURES, context.getString(R.string.app_name)); ContentValues newImage = new ContentValues(); newImage.put(MediaStore.MediaColumns.RELATIVE_PATH, imageFolder.toString()); context.getContentResolver().insert(collection, newImage);将图像放在了那个特定的文件夹中

标签: android android-gallery mediastore android-contentresolver


【解决方案1】:

您可以使用以下函数从文件夹中获取图像。

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());
            }
    }

【讨论】:

  • imagePath 有图像列表,listImageByFolder 是 HashMap>。
  • 谢谢@RinkiSharma,allFolder 变量指的是什么?
  • 它工作正常。但我只想要MyFolder 的图像。为Pictures directory 中的每个文件夹运行光标。是否可以停止冗余运行?
猜你喜欢
  • 1970-01-01
  • 2021-10-02
  • 2017-03-06
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-09
  • 2012-12-07
相关资源
最近更新 更多