如何解决安卓 |什么是 MediaStore.MediaColumns.DATA 替换?
我正在使用 MediaStore
获取 absoluteImagePaths
并将其提供给适配器类中的 Glide
。
目前我正在使用 MediaStore.MediaColumns.DATA
来获取路径。但是,最近谷歌弃用了该 api,在不久的将来可能无法使用。那么,它的替代品是什么?
...
uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
String[] projection = {
MediaStore.MediaColumns.DATA,MediaStore.Images.Media._ID
};
String orderBy = MediaStore.Images.Media.DEFAULT_SORT_ORDER;
cursor = getApplicationContext().getContentResolver().query(uri,projection,null,orderBy + " DESC");
column_index_data = cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DATA);
cursor.movetoFirst();
while (cursor.movetoNext()) {
String absoluteImagePath = cursor.getString(column_index_data);
ImageModel ImageModel = new ImageModel();
ImageModel.setPath(absoluteImagePath);
arrayList.add(ImageModel);
}
...
这段代码给出了绝对路径。然后它被送入滑过arrayList。
尝试过的解决方案
- 我尝试使用
MediaStore.Images.Media._ID
但它没有用。 - 我尝试点击此链接 MediaStore.MediaColumns.DATA is deprecated,and I want to load images from gallery to my app,但是找不到适合我的特定代码的替代品。
此链接建议使用
MediaStoroe.Images.Media._ID
并稍作调整。但是,这种调整使 Uri 不是绝对路径。我的代码需要生成absoluteImagePath
才能提供给Glide
。 - 然后,我尝试通过此链接 Get filename and path from URI from mediastore 从
path
获取Uri
,但是,这让我再次MediaStore.MediaColumns.DATA
。 - 我也尝试过谷歌,但似乎我也需要更改其他一些类才能使用
MediaStore.Images.Media._ID
。
注意:
...
Glide.with(context)
.load("file://" + arrayList.get(position).getPath())
.diskCacheStrategy(diskCacheStrategy.RESOURCE)
.into(holder.img);
...
解决方法
在 Kotlin 中使用这个:
val contentUri: Uri = ContentUris.withAppendedId(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,id)
Glide.with(context).load(contentUri).into(holder.img);
,
正如@SaurabhDhage 提到的......我调整了代码并来到了这个工作代码。这可能随处可用,但我将其发布以供将来参考。也许有人可以从中得到帮助。
MainActivity.java 内部
...
while (cursor.moveToNext()) {
long imageId = cursor.getLong(column_index_data);
Uri uriImage = Uri.withAppendedPath(uri,"" + imageId);
ImageModel ImageModel = new ImageModel();
ImageModel.setUri(uriImage);
arrayList.add(ImageModel);
}
...
GlideMethod
...
GlideApp.with(context)
//.load("file://" + arrayList.get(position).getUri())
.load(arrayList.get(position).getUri())
.diskCacheStrategy(DiskCacheStrategy.RESOURCE)
.into(holder.img);
...
在 ImageModel 类中添加方法
...
public Uri getUri() {
return uri;
}
public void setUri(Uri uri) {
this.uri = uri;
}
...
现在将加载 uri 而不是路径。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。