MediaStore:获取图像数据、缩略图和文件夹

9
我有两个列表,我们称它们为AlbumsList和PicturesList。
第一个列表显示照片集封面图(其中一张图片)的名称和包含的图片数量。
第二个列表显示所选相册中包含的所有图像。
我已经使用文件类完成了它,但是速度太慢,并且会在设备上查找所有图片,而我只需要从相册中获取。我已经阅读了关于MediaStore内容提供程序的文章,但从未使用过它。所以我有两个问题:
1.如何使用MediaStore类查找“照片集”(包含图片的文件夹),它们的缩略图以及其中的图片数量?我认为这类似于“如何查找相册中所有图像的文件路径和缩略图?”
2.如何使用MediaStore类获取特定文件夹中所有图像的文件路径和缩略图?
编辑:似乎MediaStore.Images.Media.DATA列包含文件路径,所以我可以获取相册文件夹。 MediaStore.Images.Media.Display_NAME看起来像一个文件名,但我不确定它是否总是正确的。我能否在不进行第二次查询的情况下获取缩略图数据列?
1个回答

16

这里是我写的代码:

    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类和先前声明的变量mAlbumsList,但我认为它已经足够清晰易懂了,能够理解它的工作原理。也许会对某些人有所帮助。


它提供了相册对象,其中包含文件夹路径和图像URI。因此,是的,您可以使用其中的图像URI将其显示为文件夹图像。实际上,这就是我提出问题的重点。 - Lingviston
抱歉,没有图像URI,但有图像ID。您可以稍后使用它从MediaStore检索图像。 - Lingviston

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接