首页 > 解决方案 > Android:MediaStore.Images.Media 找不到任何图片

问题描述

我知道以前有人问过这个问题,但是我已经浏览了所有我能找到的帖子,但没有任何解决方案有帮助。

我只是想在存储中找到图片(它们没有损坏,因为谷歌照片可以看到它们,而且文件应用程序还显示了所有带有图像的文件夹,所以我假设它们也被正确索引)。

这是我正在使用的 Kotlin 代码:

    val cursor1: Cursor? =
            applicationContext.contentResolver.query(
                MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                arrayOf(
                    MediaStore.Images.Media._ID
                ), null, null,
                MediaStore.Images.Media.DEFAULT_SORT_ORDER
            )

        if (cursor1 != null) {
            Log.i("Files", "passed query, cursor is size ${cursor1.count}")
        }
        val actualImageColumnIndex: Int? =
            cursor1?.getColumnIndexOrThrow(MediaStore.Images.Media._ID)
        if (cursor1 != null) {
            Log.i("Files", "cursor is not null")
            while (cursor1.moveToNext()) {
                // val i: String = cursor.getString(actualImageColumnIndex)
                val i: String? =
                    actualImageColumnIndex?.let { cursor1.getString(it) }
                Log.i("Files", "file found: $i.")
            }
        } else
            Log.i("Files", "cursor is null")
        cursor1?.close()

我也尝试从 Java 做同样的事情:

    public class Photo {
    public static ArrayList<Photo> getAllImages(Cursor cursor, Activity activity) {
        int i = 0;
        ArrayList<Photo> arrayList = new ArrayList<>();
        if (cursor == null) {
            ContentResolver resolver = activity.getContentResolver();
            cursor = resolver.query(
                    MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                    null,
                    null,
                    null,
                    null);
            if (cursor != null) {
                while (i < cursor.getCount()) {
                    cursor.moveToPosition(i);
                    int fieldIndex = cursor.getColumnIndex(MediaStore.Images.Media._ID);
                    Long id = cursor.getLong(fieldIndex);
                    Uri imageUri = ContentUris.withAppendedId(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, id);
                    Photo photo = new Photo();
                    photo.setName("");
                    photo.setUri(imageUri);
                    arrayList.add(photo);
                    i++;
                }
                cursor.close();
            }

        }
        return arrayList;
    }

    private String name;
    private Uri uri;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Uri getUri() {
        return uri;
    }

    public Photo(String name, Uri uri) {
        this.name = name;
        this.uri = uri;
    }

    public Photo() {
    }

    public void setUri(Uri uri) {
        this.uri = uri;
    }
}

,我这样调用静态函数:

      val cursorJava: ArrayList<Photo> = Photo.getAllImages(null, this)
      Log.i("Files", "files found with java: ${cursorJava.size}.")

所有这些都是在onCreate方法中完成的MainActivity。应用程序的其余部分(一个打开新活动的按钮,在 gridView 中显示来自网络的一些照片)运行良好。

我已经尝试过:

如果这是一些愚蠢的错误,我会提前道歉,但我已经坐了几个小时,没有取得任何进展。

标签: javaandroidkotlinmediastore

解决方案


推荐阅读