Media Gallery ContentProvider

时间:2013-05-16 06:42:33

标签: android android-contentprovider

我的应用程序将在我的自定义图库中显示完整的图像列表。为此,我正在使用图像缩略图的ContentProvider。选择缩略图后,我需要显示实际图像。根据我的理解,图库的图像在拇指和媒体表中具有相同的唯一ID。

这是代码。首先,我查询了Thumbnail的ContentProvider并保存了URL和ID。

String pictureThumbTemp[] = { MediaStore.Images.Thumbnails._ID, MediaStore.Images.Thumbnails.DATA };

Cursor imagecursor = context.getContentResolver().query  (MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI, 
                              pictureThumbTemp,null, null, null);

后来我在Grid中显示大拇指。 选择缩略图后,我必须显示原始图像。我正在尝试检索原始图像,如

String pictureImageTemp[] = { MediaStore.Images.Media._ID, MediaStore.Images.Media.DATA };
Cursor imagecursor = context.getContentResolver().query( MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                    pictureImageTemp, MediaStore.Images.Media._ID + " = " + mediaID + "", null,
                    MediaStore.Images.Media._ID);

总的来说,我通过它的网址显示缩略图,点击后我在原始图片表中查询缩略图的媒体ID。

但它返回一个结果为0的游标。

请帮帮我。

谢谢,
沙。

2 个答案:

答案 0 :(得分:3)

我找到了解决问题的方法。

检索原始图像的光标。 从那里我为每个图像提取了ID,并查询了ID的缩略图,返回包含路径的光标。

找到下面的代码段。

String pictureCols[] = { MediaStore.Images.Media._ID, MediaStore.Images.Media.DATA };
Cursor imagecursor = mContext.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, pictureCols,
            null, null, null);
imagecursor.moveToFirst();
mImageUrls = new ArrayList<String>();
try {
    // Iterate the cursor for Image urls
    for (int index = 0; index < imagecursor.getCount(); index++) {

      imagecursor.moveToPosition(index);
      preparePicture(imagecursor);
    }
  } catch (Exception e) {
    e.printStackTrace();
  } finally {
    imagecursor.close();
  }
}

以下是preparePicture方法

的代码
private void preparePicture(Cursor imageCursor) {

      //  get the ID for the original image
  int idColumnIndex = imageCursor.getColumnIndex(mSelectedImage.mediaID);
  Long id = imageCursor.getLong(idColumnIndex);

  // Thumbnail image Cursor for this specific image.
  String thumbCols[] = { MediaStore.Images.Thumbnails._ID, MediaStore.Images.Thumbnails.DATA };
  Cursor thumbCursor = MediaStore.Images.Thumbnails.queryMiniThumbnail(mContext.getContentResolver(), id,
        Thumbnails.MINI_KIND, thumbCols);
    thumbCursor.moveToFirst();

  // Save thumbnail URL in MediaInfo
  dataColumnIndex = thumbCursor.getColumnIndex(mSelectedThumb.data);
  String thumbURL = thumbCursor.getString(dataColumnIndex);

  thumbCursor.close();
  mImageUrls.add(url);

}

最后,我将把我所有的缩略图网址放在ArrayList中。

同样的逻辑不适用于视频缩略图。当然这是一个不同的问题:)

问候,
沙。

答案 1 :(得分:1)

尝试这个

final String[] pictureImageTemp= { MediaStore.Images.Media.DATA, MediaStore.Images.Media._ID };

        Cursor imagecursor = managedQuery(
                MediaStore.Images.Media.EXTERNAL_CONTENT_URI, pictureImageTemp, null,
                null, MediaStore.Images.Media._ID);