【发布时间】:2014-09-22 14:31:23
【问题描述】:
使用 MediaStore.Images.Media 进行查询不会显示所有图像,无论是查询内部内容还是外部内容
即使在主流设备上,结果(缩略图和从中检索这些缩略图的位置)也不相同。没有 SD 卡且只有内部存储的设备有不同的图像结果,三星设备有不同的结果,谷歌设备有不同的结果。
特别是在stackoverflow周围使用的这段代码作为解决方案,
final String[] columns = {MediaStore.Images.Thumbnails._ID};
final String orderBy = MediaStore.Images.Media._ID;
Cursor imagecursor = context.getContentResolver().query(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, columns,
null, null, orderBy);
if (imagecursor != null) {
int image_column_index = imagecursor
.getColumnIndex(MediaStore.Images.Media._ID);
int count = imagecursor.getCount();
for (int i = 0; i < count; i++) {
imagecursor.moveToPosition(i);
int id = imagecursor.getInt(image_column_index);
ImageItem imageItem = new ImageItem();
imageItem.id = id;
lastId = id;
imageItem.img = MediaStore.Images.Thumbnails.getThumbnail(
context.getApplicationContext().getContentResolver(), id,
MediaStore.Images.Thumbnails.MINI_KIND, null);
images.add(imageItem);
}
imagecursor.close();
我查看了代码,它看起来不错,但我需要一个更好的解决方案,因为结果各不相同,而且在某些设备上,我不知道生成的缩略图是从哪里提取的
【问题讨论】:
-
getThumbnail 图像在创建之前不存在。您将从问题中获得缩略图以回答查询所有图像。
-
@danny117 “你会从你的问题中得到缩略图来回答查询所有图像”什么?这对我来说似乎不是一个连贯的句子,你是说我只查询缩略图,但我应该查询不同的图像访问器?
-
您有获取缩略图的示例代码。缩略图图像可以由操作系统动态创建。 getThumbnail 方法检查是否已创建指定图像 (origId) 的缩略图。它将被阻止,直到生成缩略图。因此缩略图可能尚未创建,因此它们不存在于设备上。你想要所有的图像还是所有的缩略图?
-
@danny117 我想要所有的图像。我没有意识到检索缩略图的这些问题,但最终我只想要图像而不真正关心缩略图。我认为缩略图会节省内存,但它可能根本不是一个好的解决方案。你能发布更好的代码来获取所有图像吗?
-
上面的代码有一些问题。在获取缩略图之前使用数据列并对其执行 file.exists() 会更准确,因为某些图像文件可能已被代码删除。
标签: android android-contentprovider android-gallery mediastore