我正在查询Images
表以获取MediaStore.Images.Media.EXTERNAL_CONTENT_URI
目录中的所有图片。
请参阅以下查询:
String[] what = new String[]{ MediaStore.Images.ImageColumns.DATE_TAKEN,
MediaStore.Images.ImageColumns._ID,
MediaStore.Images.ImageColumns.MIME_TYPE,
MediaStore.Images.ImageColumns.DATA };
String where = MediaStore.Images.Media.MIME_TYPE + "='image/jpeg'" +
" OR " + MediaStore.Images.Media.MIME_TYPE + "='image/png’";
Cursor cursor = getContext().getContentResolver()
.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
what,
where,
null,
MediaStore.Images.ImageColumns.DATE_TAKEN + " DESC”);
现在,我想让Uri指向每个结果。 这就是我现在正在做的事情:
int dataIndex = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
String path = cursor.getString(dataIndex);
final Uri uri = Uri.fromFile(new File(path));
例如,我从DATA
列中选择路径,创建文件并使用Uri.fromFile
。我有两个问题。
这可以保证有效吗?以上查询是否保证返回数据列中的路径?它适用于手机中的所有图片:path
始终是路径,如/storage/0/whatever.jpg
,uri.toString()
与文件方案相同。尽管如此,图片很好地可以通过内容来定义:// uris,但我看不出它们是如何(以及如果)在图像表中表示的。
如果没有,我应该在DATA
列中看到什么,以及如何从中获取Uri?
答案 0 :(得分:10)
上述查询是否保证返回数据列中的路径?
它应该返回一些东西。那"东西"可能无法使用。例如,图像可能位于可移动存储上,您无法直接访问它。
如何从中获取Uri?
你不是。您从Uri
:
_ID
Uri imageUri=
ContentUris
.withAppendedId(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
cursor.getInt(cursor.getColumnIndex(MediaStore.Images.ImageColumns._ID)));