【问题标题】:How to find files quickly?如何快速找到文件?
【发布时间】:2014-01-31 17:13:22
【问题描述】:

我真的需要一些帮助!

我想在 Android 上制作 MP3 播放器,因此我需要找到存储中的所有 MP3 文件。

所以我在 get MP3 方法中递归地搜索它们:

private void getMP3Files(Context context, String directory,ArrayList<MusicListArray> mp3_list){

MediaMetadataRetriever mediaMetadataRetriever = new MediaMetadataRetriever();
Uri uri;
byte[] album_art;
Bitmap bitmap;
/*File[] files = Directory.listFiles(new MP3FileNameFilter());
files = Directory.listFiles();*/

File folder = new File(directory);
for (File file : folder.listFiles()) {
    if (file.isFile()) {
        if (file.getName().endsWith(".mp3") || file.getName().endsWith(".MP3")) {
            uri = Uri.fromFile(file);
            mediaMetadataRetriever.setDataSource(context,uri);
            String artist = mediaMetadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST);
            String title = file.getName();
            album_art = mediaMetadataRetriever.getEmbeddedPicture();
            if(album_art != null){
                bitmap = BitmapFactory.decodeByteArray(album_art, 0, album_art.length);
            }else{
                bitmap = BitmapFactory.decodeResource(context.getResources(),R.drawable.ic_launcher);
            }
            if(bitmap == null){
                bitmap = BitmapFactory.decodeResource(context.getResources(),R.drawable.ic_launcher);
            }
            if (title.indexOf(".") > 0)
                title = title.substring(0, title.lastIndexOf("."));
            if(artist == null){
                artist = getString(R.string.unknown_artist);
            }

            mp3_list.add(new MusicListArray(title,artist,file,bitmap));
        }
    }else if(file.isDirectory()){
        getMP3Files(context, file.getPath(), mp3_list);
    }
}
Collections.sort(mp3_list);

/*for(int i=0;i<files.length;i++){
    mp3_list.add(new MusicListArray(files[i].getName(),"Test",files[i]));
}*/
//return mp3_list;

}

这非常慢,每次启动我的应用程序大约需要 3 秒。

第一个问题:我如何设法减少花费的时间? 第二个问题:如何将列表保存在文件中并加载?

提前致谢!

【问题讨论】:

    标签: android file search mp3


    【解决方案1】:

    我建议您使用 SQL 数据库来存储 mp3 的元数据(包括文件位置)。不过,我应该警告您,我没有使用 Android 媒体的经验。基本思路:

    1) 首次使用(或在设置中手动同步)执行完整的 3 秒同步 -> 查看 SharedPreferences 以存储指示您的应用首次使用的密钥

    2) 将此元信息存储在 SQL 数据库中。

    3) 让应用程序从数据库中读取,因为这样会更快,尤其是在表格设计正确的情况下。存储封面艺术、文件位置、艺术家、标题等内容。您还可以添加收听次数等内容。此外,如果您将 SQL 层包装到内容提供程序中,您可以对所有音乐执行自定义搜索。

    4) 当应用程序运行时,运行一个后台索引服务来查找新音乐,更正更改/删除等。查看 android Service

    这样做的好处是您的应用程序对用户来说会更快,只需在前台加载一次所有数据,并在搜索、歌曲选择、自定义数据等方面为您提供更大的灵活性。

    【讨论】:

    • 呜呜呜我真的要学很多东西! :D 无论如何,谢谢你的建议!我将看一下 SQL 并尝试实现它。我会让你知道它是否有效。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-13
    • 1970-01-01
    • 2015-03-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多