Java 使用URI显示图像在Android Q上不起作用
在我的应用程序中,我试图显示图库中特定文件夹中的所有图像,下面的代码在Android O上运行良好,但当我在Android Q(API 29)中测试时,没有显示任何图像Java 使用URI显示图像在Android Q上不起作用,java,android,uri,android-10.0,Java,Android,Uri,Android 10.0,在我的应用程序中,我试图显示图库中特定文件夹中的所有图像,下面的代码在Android O上运行良好,但当我在Android Q(API 29)中测试时,没有显示任何图像 public static File[] getAllImages(Activity activity) { String[] r3 = new String[2]; int i = 0; r3[0] = "_data"; r3[1] = "_id";
public static File[] getAllImages(Activity activity) {
String[] r3 = new String[2];
int i = 0;
r3[0] = "_data";
r3[1] = "_id";
Cursor query = activity.getContentResolver().query(Media.EXTERNAL_CONTENT_URI, r3, null, null, "datetaken DESC");
ArrayList arrayList = new ArrayList();
while (i < query.getCount()) {
query.moveToPosition(i);
int columnIndex = query.getColumnIndex("_data");
if (query.getString(columnIndex).contains("/Pictures/FolderName")) {
arrayList.add(new File(query.getString(columnIndex)));
}
i++;
}
return (File[]) arrayList.toArray(new File[arrayList.size()]);
}
公共静态文件[]GetAllImage(活动){
字符串[]r3=新字符串[2];
int i=0;
r3[0]=“_数据”;
r3[1]=“_id”;
游标查询=activity.getContentResolver().query(Media.EXTERNAL_CONTENT_URI,r3,null,null,“datetake DESC”);
ArrayList ArrayList=新的ArrayList();
而(i
更新:
private ArrayList<Photo> getAllShownImagesPath(Activity activity) {
ArrayList<Photo> listOfAllImages = new ArrayList<>();
String[] r3 = new String[2];
int i = 0;
r3[0] = "_data";
r3[1] = "_id";
Cursor query = activity.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, r3, null, null, "datetaken DESC");
while (i < query.getCount()) {
query.moveToPosition(i);
int columnIndex = query.getColumnIndex("_id");
listOfAllImages.add(new Photo("", ContentUris.withAppendedId(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, columnIndex)));
i++;
}
return listOfAllImages;
}
private ArrayList getAllShownImagesPath(活动){
ArrayList listOfAllImages=新的ArrayList();
字符串[]r3=新字符串[2];
int i=0;
r3[0]=“_数据”;
r3[1]=“_id”;
游标查询=activity.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,r3,null,null,“datetake DESC”);
而(i
arrayList
photo,里面满是uri
,我已经用photo.size()检查过了
int columnIndex=query.getColumnIndex(“_数据”)
数据
是:
- Android Q及更高版本上不可用
- Android早期版本不可靠(例如,可能指向您无权访问的文件)
就最终使用这些图像而言:
- 从
光标中获取\u id
列
- 将其与根
Uri
(Media.EXTERNAL\u CONTENT\u Uri
)一起传递给ContentUris.withAppendedId()
)
ContentUris.withAppendedId()
提供了一个Uri
,您可以使用它与您喜爱的图像加载库一起显示图像
根据您的过滤逻辑:
- 在查询中包括
MediaStore.Image.Media.RELATIVE\u路径
- 检查该列,看看它是否引用了您的姓名,使用的算法与您将图像放入
MediaStore
时使用的算法相同
谢谢您的回答,您能检查我的更新吗post@pic:请不要编辑问题并完全替换您的问题。现在,有人遇到这个问题,我的答案必须通过修改历史来查看我回答的实际问题。就您的问题而言,这里的内容似乎还可以,因此问题可能在于如何使用照片
对象。