Android |什么是 MediaStore.MediaColumns.DATA 替换?
Android | What is MediaStore.MediaColumns.DATA Replacement?
我正在使用 MediaStore
获取 absoluteImagePaths
并将其提供给适配器 class 中的 Glide
。
目前我正在使用 MediaStore.MediaColumns.DATA
来获取路径。但是,最近 google 弃用了 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
但它没有用。
- 我尝试遵循此 link MediaStore.MediaColumns.DATA is deprecated, and I want to load images from gallery to my app 但是,我找不到适合我的特定代码的替代品。
link 建议使用
MediaStoroe.Images.Media._ID
并稍加调整。但是,这个调整给了一个 Uri 而不是绝对路径。我的代码需要生成 absoluteImagePath
以提供给 Glide
.
- 然后我尝试在 link Get filename and path from URI from mediastore 之后从
Uri
获取 path
但是,它又导致我 MediaStore.MediaColumns.DATA
.
- 我也尝试了 google 但是,似乎我也需要更改其他一些 classes 才能使用
MediaStore.Images.Media._ID
。
注:
- 我有
ImageModel
Class 到 get
和 set
path
的图像。
- 我有
Adapter
Class 方法 onBindViewHolder
其中包含 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 中添加了方法 class
...
public Uri getUri() {
return uri;
}
public void setUri(Uri uri) {
this.uri = uri;
}
...
这将加载 uris 而不是路径。
我正在使用 MediaStore
获取 absoluteImagePaths
并将其提供给适配器 class 中的 Glide
。
目前我正在使用 MediaStore.MediaColumns.DATA
来获取路径。但是,最近 google 弃用了 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
但它没有用。 - 我尝试遵循此 link MediaStore.MediaColumns.DATA is deprecated, and I want to load images from gallery to my app 但是,我找不到适合我的特定代码的替代品。
link 建议使用
MediaStoroe.Images.Media._ID
并稍加调整。但是,这个调整给了一个 Uri 而不是绝对路径。我的代码需要生成absoluteImagePath
以提供给Glide
. - 然后我尝试在 link Get filename and path from URI from mediastore 之后从
Uri
获取path
但是,它又导致我MediaStore.MediaColumns.DATA
. - 我也尝试了 google 但是,似乎我也需要更改其他一些 classes 才能使用
MediaStore.Images.Media._ID
。
注:
- 我有
ImageModel
Class 到get
和set
path
的图像。 - 我有
Adapter
Class 方法onBindViewHolder
其中包含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 中添加了方法 class
...
public Uri getUri() {
return uri;
}
public void setUri(Uri uri) {
this.uri = uri;
}
...
这将加载 uris 而不是路径。