Java 使用URI显示图像在Android Q上不起作用

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";

在我的应用程序中,我试图显示图库中特定文件夹中的所有图像,下面的代码在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";
        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:请不要编辑问题并完全替换您的问题。现在,有人遇到这个问题,我的答案必须通过修改历史来查看我回答的实际问题。就您的问题而言,这里的内容似乎还可以,因此问题可能在于如何使用
照片
对象。