java - 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 中显示来自网络的一些照片)运行良好。
我已经尝试过:
- 从清单中给出 READ_EXTERNAL_STORAGE
- 使用 INTERNAL_CONTENT_URI 而不是 EXTERNAL 进行搜索(但至少据我了解,EXTERNAL 是可以使用的)
- 在 build.gradle 中:
targetSdkVersion/compileSdkVersion 30/29
并在具有 Android 11/10 的 VM 上运行应用程序,+ 在 Android 10 上进行 USB 调试 - 用于
android:requestLegacyExternalStorage="true"
Android 10
如果这是一些愚蠢的错误,我会提前道歉,但我已经坐了几个小时,没有取得任何进展。
解决方案
推荐阅读
- r - 分析样本量不等的数据
- google-sheets - Googledoc-如何在打开时更新链接表(来自 googlesheet)
- javascript - 如何以编程方式将文本输入到 Angular INPUT 元素中?
- php - 使用 php 将图像上传到我的项目根目录中的“上传”目录
- r - 如何计算与R中平均值的偏差?
- python-3.x - 为什么我的包含“从文件导入类”的脚本无法运行?
- r - 为什么 ggfortify 在这 2 个时间序列图中失败了?
- c - C 中 mat.h 的未定义引用
- python - 导入系统,sys.path.insert() 不工作
- c# - 如何更改文本值