如何在文件夹和子文件夹中搜索媒体文件?

时间:2013-11-19 10:09:49

标签: android media

如何在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();

但它看起来像硬编码,我需要在文件夹/子文件夹中搜索音频。在我看来,这个查询搜索所有音频。

感谢您的帮助。

1 个答案:

答案 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。