如何从 Android Mediastore 加载 .gif 图像
How does one load .gif images from the Android Mediastore
我需要将几张 gif 图片加载到自定义画廊视图中。
使用 mediastore 只能为我提供 png/jpg 图像类型。
经过几个小时的谷歌搜索,我仍然找不到答案..
我用来从媒体存储加载图像的代码是:
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);
感谢!
确保包含 gif 的目录已被媒体商店扫描,以便通过内容提供商检索其内容。
查看此 link 了解更多信息:
http://www.grokkingandroid.com/adding-files-to-androids-media-library-using-the-mediascanner/
Try This, It may help you.
使用String mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension("gif");
的实例
String mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension("pdf");
来自这个答案
这给出了完美的结果。
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));
}
我更喜欢使用 Android LoaderManager.LoaderCallbacks,因为这会在后台加载光标,完成后我们会得到结果。
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) {
}
我需要将几张 gif 图片加载到自定义画廊视图中。 使用 mediastore 只能为我提供 png/jpg 图像类型。 经过几个小时的谷歌搜索,我仍然找不到答案..
我用来从媒体存储加载图像的代码是:
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);
感谢!
确保包含 gif 的目录已被媒体商店扫描,以便通过内容提供商检索其内容。
查看此 link 了解更多信息: http://www.grokkingandroid.com/adding-files-to-androids-media-library-using-the-mediascanner/
Try This, It may help you.
使用String mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension("gif");
String mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension("pdf");
来自这个答案
这给出了完美的结果。
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));
}
我更喜欢使用 Android LoaderManager.LoaderCallbacks,因为这会在后台加载光标,完成后我们会得到结果。
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) {
}