locomain
locomain

Reputation: 195

How does one load .gif images from the Android Mediastore

i need to load a couple of gifs into a custom gallery view. using the mediastore only provides me with png/jpg image types. after a couple of hours googleing i still could not find the answer..

the code i use to load images from the mediastore is:

    final String sortOrder = mPreferences.getSortMode();

    final Uri uri = android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI;

    String[] projection = { MediaStore.MediaColumns.DATA,
            MediaStore.Images.Media.BUCKET_ID, MediaStore.Images.Media.DISPLAY_NAME };

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

thnx!

Upvotes: 1

Views: 2113

Answers (3)

Nitin Agarwal
Nitin Agarwal

Reputation: 151

this gave the perfect result.

private static final String[] COLUMNS_OF_INTEREST = new String[]
{
        MediaStore.Video.Media._ID,
        MediaStore.Video.Media.DATA,
        MediaStore.Video.Media.DISPLAY_NAME,
        MediaStore.Video.Media.SIZE,
        MediaStore.Video.Media.WIDTH,
        MediaStore.Video.Media.HEIGHT,
        MediaStore.Video.Media.DATE_ADDED
};

public void printGifUri(Context context)
{
    ContentResolver cr = context.getContentResolver();

    String selection = MediaStore.Images.Media.MIME_TYPE + "=?";
    String mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension("gif");
    String[] selectionArgsPdf = new String[]{ mimeType };

    Cursor gifCursor = cr.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, COLUMNS_OF_INTEREST, selection,selectionArgsPdf,
            MediaStore.Images.Media.DATE_ADDED + " DESC");

    gifCursor.moveToFirst();
    int columnIndexUri = gifCursor.getColumnIndexOrThrow(MediaStore.Video.Media.DATA);
    for (int i = 0; i < gifCursor.getCount(); i++)
        Log.d("gif file uri -> ", gifCursor.getString(columnIndexUri));
}

I prefer using Android LoaderManager.LoaderCallbacks, as this loads the cursor in background and we get the result when finished.

public class GifListManagerImpl implements LoaderManager.LoaderCallbacks<Cursor> {

Context mContext;

private static final String[] COLUMNS_OF_INTEREST = new String[]
{
        MediaStore.Video.Media._ID,
        MediaStore.Video.Media.DATA,
        MediaStore.Video.Media.DISPLAY_NAME,
        MediaStore.Video.Media.SIZE,
        MediaStore.Video.Media.WIDTH,
        MediaStore.Video.Media.HEIGHT,
        MediaStore.Video.Media.DATE_ADDED
};

public  GifListManagerImpl(Context context)
{
    mContext = context;
}

@Override
public Loader<Cursor> onCreateLoader(int i, Bundle bundle) {

    String selection = MediaStore.Images.Media.MIME_TYPE + "=?";
    String mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension("gif");
    String[] selectionArgsPdf = new String[]{ mimeType };
    return new CursorLoader(mContext, MediaStore.Images.Media.EXTERNAL_CONTENT_URI, COLUMNS_OF_INTEREST, selection,selectionArgsPdf,
            MediaStore.Images.Media.DATE_ADDED + " DESC");
}

@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
    cursor.moveToFirst();
    int columnIndexUri = cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DATA);
    for (int i = 0; i < cursor.getCount(); i++)
        Log.d("gif file uri -> ", cursor.getString(columnIndexUri));

}

@Override
public void onLoaderReset(Loader<Cursor> loader) {

}

Upvotes: 1

Mr X
Mr X

Reputation: 1063

Try This, It may help you.

use String mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension("gif");

instance of

String mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension("pdf");

from this ans.

Upvotes: 3

Mina Wissa
Mina Wissa

Reputation: 10971

Make sure that your directory containing your gifs is scanned by the media store in order to retrieve its content through the content provider.

check this link for more info: http://www.grokkingandroid.com/adding-files-to-androids-media-library-using-the-mediascanner/

Upvotes: 0

Related Questions