我一直在通过以下方式从MediaStore
中检索图像......
Uri uriExternal = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
String[] projection = {
MediaStore.MediaColumns._ID,
MediaStore.MediaColumns.DATE_ADDED
};
Cursor cursor = getContentResolver()
.query(uriExternal, projection,
MediaStore.MediaColumns.DATA + " IS NOT NULL",
null,
MediaStore.MediaColumns.DATE_ADDED + " DESC");
if(cursor != null) {
while (cursor.moveToNext()) {
String _id = cursor.getString(cursor.getColumnIndex(MediaStore.MediaColumns._ID));
paths.add(uriExternal.toString() + "/" + _id);
}
cursor.close();
}
基本上,我只是将文件 ID 附加到外部内容提供程序 uri。这形成了一个我可以与内容提供商一起使用的 URI...
content://media/external/images/media/{id}
这一切都运行良好,所有外部图像都完美显示和加载。但是,由于我未能找到适当的文档,我有点担心我没有以正确的方式做事。特别是因为我构建 uri 的方式......有点硬编码它...
问题是...
这是为外部图像构造内容 uri 的正确方法吗?
有没有更可靠的方法来实现这一目标?
就个人而言,我使用 ContentUris.withAppendedId()
.这样,我就不必担心我是否以/
结尾的Uri
开始。
通常,MediaStore
遵循原始ContentProvider
愿景,即将内容 ID 用作指向内容的Uri
的最后一个路径段。但是,这不是一般规则,并且不适用于所有提供商。