什么是在Android中搜索存储中的文件的有效方法?

时间:2018-01-23 14:46:12

标签: java android

我正在Android中创建一个音乐播放器应用程序。在MainActivity中,我在一个简单的列表视图中列出了所有(.mp3,.wav,.flac)文件。我正在使用此getSongs方法搜索此类文件:

public void getSongs(File root) {
    File listFile[] = root.listFiles();
    if (listFile != null && listFile.length > 0) {
        for (int i = 0; i < listFile.length; i++) {

            if (listFile[i].isDirectory() && !listFile[i].isHidden()) {
                getSongs(listFile[i]);

            } else {
                if (listFile[i].getName().endsWith(".mp3") || 
                    listFile[i].getName().endsWith(".MP3") || 
                    listFile[i].getName().endsWith(".flac")|| 
                    listFile[i].getName().endsWith(".wav")) {
                    songList.add(listFile[i]);
                }
            }
        }
    }
}

然后从主要活动我称之为:

File externalSD = new File("/storage/"); //gets the external but not internal!!
getSongs(externalSD);
File internalSD = new File(Environment.getExternalStorageDirectory().getAbsolutePath()); //gets the internal but not external!!
getSongs(internalSD);

适合我(我只有100首歌曲)但如果你有大量这样的文件,它真的很慢(我的朋友有大约2.5k的歌曲......)。 我想知道如何才能更有效地实现这一目标。

1 个答案:

答案 0 :(得分:0)

你可以尝试:

  • 使用AsyncTask检索另一个帖子中的歌曲。
  • 从Android的媒体数据库中获取歌曲列表 - 您将不得不使用SQL和MediaStore.Audio。请记住使用AsyncTask或Loader

第二种选择会更快,因为你不必遍历整个系统。