如何在Android设备上搜索文件夹和子文件夹快速中的媒体文件? 我只需要布尔结果:true为false。如果文件夹或其子文件夹包含媒体文件(音乐文件),则为true。我尝试使用递归函数在每个文件夹和子文件夹中搜索媒体文件,但由于这个原因需要很长时间并崩溃。
这是我的递归函数的代码:
directoryName - 文件夹的路径, trackChecker - 检查文件是否为音频的功能。
private boolean FolderWithMusic(String directoryName) {
File directory = new File(directoryName);
// get all the files from a directory
File[] fList = directory.listFiles();
for (File file : fList) {
if (file.isFile()) {
if(trackChecker(file.getName()))
return true;
} else if (file.isDirectory() && file.canRead() ) {
if(FolderWithMusic(file.getAbsolutePath()))
return true;
else
return false;
}
}
return false;
}
我想它应该是一个managedQuery,但我不知道如何为文件夹做这件事。 我找到了这样的查询代码:
Cursor cursor = managedQuery(
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
new String[] { MediaStore.Audio.Media.DISPLAY_NAME,
MediaStore.Audio.Media.DATA},
MediaStore.Audio.Media.DATA + " like ? OR " + MediaStore.Audio.Media.DATA + " like ? ",
new String[] {"%mp3","%wav"},
"LOWER(" + MediaStore.Audio.Media.TITLE + ") ASC");
a = cursor.getCount();
但它看起来像硬编码,我需要在文件夹/子文件夹中搜索音频。在我看来,这个查询搜索所有音频。
感谢您的帮助。
答案 0 :(得分:2)
在文件夹和子文件夹中快速搜索音乐:
private boolean FolderWithMusic(String directoryPath){
Cursor cursor;
String selection;
String[] projection = {MediaStore.Audio.Media.IS_MUSIC};
Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
//Create query for searching media files in folder
selection = MediaStore.Audio.Media.DATA + " like " + "'%" + directoryPath + "/%'";
cursor = getContentResolver().query(uri, projection, selection, null, null);
if (cursor != null) {
boolean isDataPresent;
isDataPresent = cursor.moveToFirst();
return isDataPresent;
}
return false;
}
如果文件夹包含音乐 - 函数返回True。