我正在使用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, 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。媒体列。DATA已被弃用,我想将图片从库加载到我的应用程序中,但我找不到合适的替代品来替换我的特定代码。这个链接建议使用带有一些小调整的
MediaStoroe.Images.Media._ID
。但是,这种调整给了一个Uri不是绝对的路径。并且我的代码需要生成absoluteImagePath
以提供给Glide
- 然后,我试图按照这个链接从
Uri
中获取path
。从媒体存储的URI中获取文件名和路径,但它再次导致我使用MediaStore.MediaColumns.DATA
- 我也试过谷歌,但似乎我也需要更改其他一些类才能使用
MediaStore.Images.Media._ID
注意:
- 我有
ImageModel
类到图像的get
和set
path
- 我有方法为
onBindViewHolder
的Adapter
类,其中包含Glide
方法
...
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);
}
...
滑翔方法
...
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而不是路径。