繁体   English   中英

从ContentResolver.query()获取URI

[英]Get URI from ContentResolver.query()

我正在查询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 我有两个问题。

  1. 这保证有效吗? 以上查询是否保证返回数据列中的路径? 它适用于我手机中的所有图片: path始终是路径,如/storage/0/whatever.jpg ,而uri.toString()与文件方案相同。 尽管如此,图片很好地可以通过content:// uris来定义,但是我没有看到它们如何(以及如果)在images表中表示。

  2. 如果没有,我应该在DATA列中期待什么,以及如何从中获取Uri?

以上查询是否保证返回数据列中的路径?

它应该返回一些东西。 那些“东西”可能无法使用。 例如,映像可能位于可移动存储上,您无法直接访问它。

如何从它获得一个Uri?

你没有。 你从_ID构造一个Uri

Uri imageUri=
  ContentUris
    .withAppendedId(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
       cursor.getInt(cursor.getColumnIndex(MediaStore.Images.ImageColumns._ID)));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM