Reputation: 195
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
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
Reputation: 1063
use String mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension("gif");
instance of
String mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension("pdf");
from this ans.
Upvotes: 3
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