sha
sha

Reputation: 1420

Media Gallery ContentProvider

My app will display the complete list of images in my custom gallery .For this, I'm using ContentProvider of Image Thumbnails. Upon selecting the thumbnail's I need to display the actual image.According to my understanding Gallery's image do have same unique ID in Thumb and Media Table.

Here is the code. Firstly I queried Thumbnail's ContentProvider and saved URL and 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);

Later I am displaying thumbs in Grid. Upon selection of thumbnail, I have to display original image. I'm trying to retrieve the original image like

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

Overall, I'm showing thumbnail through it's url and upon click I'm querying the thumbnail's media ID in Original image table.

But it is returning a cursor with 0 results.

Please help me out.

Thanks,
sha.

Upvotes: 0

Views: 4885

Answers (2)

sha
sha

Reputation: 1420

I cracked out a way which worked out.

Retrieved the cursor for Original Images. From that I pulled the ID for every image and Queried the Thumbnails for the ID which returns a cursor containing paths.

Find the code snippet below.

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

Here is the code for preparePicture method

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

}

Finally, I will have all my Thumbnail urls in the ArrayList.

The same logic is not working for video thumbnails. Of course that is a different question :)

Regards,
Sha.

Upvotes: 3

Sunil Kumar
Sunil Kumar

Reputation: 7092

try this one

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

Upvotes: 1

Related Questions