gpt4 book ai didi

Android 9 (Pie) ContentResolver 查询 MediaStore.Images.Media.EXTERNAL_CONTENT_URI 在 api 28 上返回 null

转载 作者:行者123 更新时间:2023-12-01 15:58:59 31 4
gpt4 key购买 nike

我正在获取设备中所有图像、视频和音频文件的列表。以下代码在 android O (api 27) 之前的所有设备上都可以正常工作。但它不适用于 android Pie 设备(api 28)。 Cursorquery 返回 null

图片

String[] proj = {MediaStore.Images.Media._ID,
MediaStore.Images.Media.DATA,
MediaStore.Images.Media.TITLE,
MediaStore.Images.Media.SIZE
};
ContentResolver cr = context.getContentResolver();

Cursor imagescursor = context.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
proj, null, null, "_size DESC");

视频文件
String[] proj = {MediaStore.Video.Media._ID,
MediaStore.Video.Media.DATA,
MediaStore.Video.Media.TITLE,
MediaStore.Video.Media.SIZE,
MediaStore.Video.Media.DURATION
};
ContentResolver cr = context.getContentResolver();

Cursor videocursor = context.getContentResolver().query(MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
proj, null, null, "_size DESC");

对于音频文件
String[] proj = {MediaStore.Audio.Media._ID,
MediaStore.Audio.Media.DATA,
MediaStore.Audio.Media.DISPLAY_NAME,
MediaStore.Audio.Media.SIZE,
MediaStore.Audio.Media.DURATION};
ContentResolver cr = context.getContentResolver();

Cursor audiocursor = context.getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
proj, null, null, "_size DESC");

请如果有人可以帮助我!

最佳答案

所以我能够找到解决方法。如果有人找到更好的方法,请告诉我。

Step 1. 本地存储目录路径

File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath());

第 2 步。对于图像、视频、音频
private ArrayList<File> allShownImagesPath = new ArrayList<>();
private ArrayList<File> allShownVideoPath = new ArrayList<>();
private ArrayList<File> allShownAudioPath = new ArrayList<>();

步骤 3. 我在后台线程 中调用此方法
public void searchDir(File dir) {
//audio
String mp3 = ".mp3";
String ogg = ".ogg";
String aac = ".aac";
//video
String mp4 = ".mp4";
String mkv = ".mkv";
String avi = ".avi";
String webm = ".webm";
//images
String webp = ".webp";
String png = ".png";
String jpg = ".jpg";
String gif = ".gif";

File[] listFile = dir.listFiles();
if (listFile != null) {
for (File file : listFile) {


if (file.isDirectory()) {
if (!file.getName().equals("Android") && !file.isHidden()) // will skip Android folder, hidden folders
searchDir(file);
} else {
if (!file.isHidden()) { // will skip hidden files, totally up to you
String name = file.getName();
if (name.endsWith(mp3) || name.endsWith(ogg) || name.endsWith(aac)) { //Audio file
allShownAudioPath.add(file);
} else if (name.endsWith(mp4) || name.endsWith(mkv) || name.endsWith(avi) || name.endsWith(webm)) { //Video file
allShownVideoPath.add(file);
} else if (name.endsWith(webp) || name.endsWith(png) || name.endsWith(jpg) || name.endsWith(gif)) { //Image file
allShownImagesPath.add(file);
}
}
}
}
}
}

当然,您可以使用更多过滤器来查找不同的文件,例如 .pdf , .docx , ETC。

与问题无关,但您可以对文件进行排序。
if (allShownImagesPath.size() > 0){

File[] sortedImgFiles = allShownImagesPath.toArray(new File[0]);
Arrays.sort(sortedImgFiles, LastModifiedFileComparator.LASTMODIFIED_COMPARATOR);
}

关于Android 9 (Pie) ContentResolver 查询 MediaStore.Images.Media.EXTERNAL_CONTENT_URI 在 api 28 上返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53315937/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com