8

我有两个清单。我们称它们为 AlbumsList 和 PicturesList。

  • 第一个显示相册封面(其中一张图片)它的名称和其中的图片数量。
  • 第二个显示所选相册中包含的所有图像。

我已经使用 File 类完成了它,但它工作得太慢了,当我只需要来自画廊的图像时,它会在设备上找到所有图像。我读过有关 MediaStore 内容提供程序的信息,但从未使用过它。所以我有两个问题:

  1. 如何使用 MediaStore 类查找“相册”(图库中包含图片的文件夹)、缩略图以及其中的图片数量?我认为这类似于“如何查找图库中所有图像的文件路径和缩略图?”
  2. 如何使用 MediaStore 类获取特定文件夹中所有图像的文件路径和缩略图?

编辑:似乎 MediaStore.Images.Media.DATA 列包含文件路径,所以我可以获得专辑文件夹。MediaStore.Images.Media.Display_NAME 看起来像一个文件名,但我不确定它是否总是正确的。我可以在不进行第二次查询的情况下将缩略图数据列添加到这些列中吗?

4

1 回答 1

14

这是我写的代码:

    Uri uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
    String[] projection = { MediaStore.Images.Media._ID, MediaStore.Images.Media.BUCKET_ID,
            MediaStore.Images.Media.BUCKET_DISPLAY_NAME };

    Cursor cursor = getContentResolver().query(uri, projection, null, null, null);

    ArrayList<String> ids = new ArrayList<String>();
    mAlbumsList.clear();
    if (cursor != null) {
        while (cursor.moveToNext()) {
            Album album = new Album();

            int columnIndex = cursor.getColumnIndex(MediaStore.Images.Media.BUCKET_ID);
            album.id = cursor.getString(columnIndex);

            if (!ids.contains(album.id)) {
                columnIndex = cursor.getColumnIndex(MediaStore.Images.Media.BUCKET_DISPLAY_NAME);
                album.name = cursor.getString(columnIndex);

                columnIndex = cursor.getColumnIndex(MediaStore.Images.Media._ID);
                album.coverID = cursor.getLong(columnIndex);

                mAlbumsList.add(album);
                ids.add(album.id);
            } else {
                mAlbumsList.get(ids.indexOf(album.id)).count++;
            }
        }
        cursor.close();

它使用我的ALbum类和之前声明的 varmAlbumsList但我认为它很清楚可以理解它是如何工作的。也许它会帮助某人。

于 2013-06-16T09:36:33.993 回答