android - Android 内容 Uri 格式
问题描述
我一直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
结尾的a 开头/
。:-)
一般来说,MediaStore
坚持ContentProvider
使用内容 ID 作为Uri
指向内容的最后一个路径段的原始设想。但是,这不是一般规则,并且不适用于所有提供商。
推荐阅读
- sendgrid - 如何设置 noreply@
谷歌云作曲家? - javascript - Node.js + Express 给我错误 - 无法获取 /
- .net-core - 基于 NuGet PackageReference 定义一个 C# 预处理器符号
- r - 计算一个月内的日期观察
- android - Twilio 仅数据 API
- c - 为什么我遇到 pthread_cond_signal 和 pthread_cond_wait 的死锁?
- c# - 在 DataGrid 中的 DataTable 中滚动冻结
- python - 使用 zip 文件提交 pyspark 作业
- mysql - Laradock MySQL 容器退出 (0) - 服务器 ('2') 和数据字典 ('0') 的不同 lower_case_table_names 设置
- javascript - TypeError:当我尝试访问 API 调用数据时,无法读取未定义的属性“地图”