笔记89 | 通过File扫描音乐

上周完成了音乐视频的新扫描方式修改,此处小结一下扫描的核心方法。

传入绝对路径即可获取该路径下的文件内容,此处为筛选了音乐文件的方法

    /**     * @param path 路径     * @return     */    @SuppressWarnings("resource")    public static ArrayList<MusicName> getPathAllData(String path){        ArrayList<MusicName> items = new ArrayList<MusicName>();         ArrayList<MusicName> itemsFolder = new ArrayList<MusicName>(); //存放文件夹类型        ArrayList<MusicName> itemsFile = new ArrayList<MusicName>(); //存放音乐类型        File f = new File(path);         if(f == null)            return null;        FileFilter filter = new FileFilter() {                  @Override            public boolean accept(File file) {                // 根据设置选项,配置是否显示隐藏文件                if(AbsSuperApplication.isShowHideFile){                    if (file.canRead()){                        return true;                    }                    return false;                }else{                    if (!file.isHidden() && file.canRead()){                        return true;                    }                    return false;                }            }        };
        File[] files = f.listFiles(filter);//用FIle的扫描方法 返回该路径下所有的文件路径名        if(files != null) {            if(files.length == 0)                return null;            for(File file : files) {                //获取文件信息并添加到集合                String name = file.getName();  //拿到文件的名称                String size = FileUtils.getDataSizeFormat(file.length()); //这个是个单位的换算方法                String absolutePath = file.getAbsolutePath(); //拿到文件的路径                // 根据文件类型添加不同的图标                String lastTime = FileUtils.getModifiedTime(file);                if(file.isDirectory()){ //如果改子文件是一个文件夹                    if(!isMusicFolder(file)) continue;                    itemsFolder.add(new MusicName(name, absolutePath, lastTime, size, file.isDirectory()));                }else{                    if(!isMusic(absolutePath)) continue;                    itemsFile.add(new MusicName(name, absolutePath, lastTime, size, file.isDirectory()));                }            }            items.addAll(itemsFolder);            items.addAll(itemsFile);            return items;        }else{            return null;        }    }

筛选音乐的方法:

   /**
     * @param 过滤的方法 可以筛选你想要的内容 比如你做图片浏览器  可以筛选图片的格式 视频就筛选视频格式     * @return     */    public static boolean isMusicFolder(File f){        if(f.isDirectory()){            File[] fs = f.listFiles();            if(fs == null || fs.length == 0)                return false;            for (int i = 0; i < fs.length; i++) {                String n = fs[i].getName().toUpperCase(Locale.ENGLISH);                if (fs[i].isFile() && !n.startsWith(".") &&                        (n.endsWith(".MP3") ||                                n.endsWith(".WMA") ||                                n.endsWith(".AAC") ||                                n.endsWith(".OGG") ||                                n.endsWith(".PCM") ||                                n.endsWith(".M4A") ||                                n.endsWith(".AC3") ||                                n.endsWith(".EC3") ||                                n.endsWith(".DTSHD") ||                                n.endsWith(".MKA") ||                                n.endsWith(".RA") ||                                n.endsWith(".WAV") ||                                n.endsWith(".CD") ||                                n.endsWith(".AMR") ||                                n.endsWith(".MP2") ||                                n.endsWith(".APE") ||                                n.endsWith(".DTS") ||                                n.endsWith(".FLAC") ||                                n.endsWith(".MIDI") ||                                n.endsWith(".MID") ||                                n.endsWith(".MPC") ||                                n.endsWith(".TTA") ||                                n.endsWith(".ASX") ||                                n.endsWith(".AIFF") ||                                n.endsWith(".AU"))) {                    return true;                }            }            return false;        }    }
    /**     * @param path判断该路径文件是否包含有是音乐     * @return     */    public static boolean isMusic(String path){        if(TextUtils.isEmpty(path)){            return false;        }        File f = new File(path);        String n = f.getName().toUpperCase(Locale.ENGLISH);        if (f.isFile() && !n.startsWith(".") &&                (n.endsWith(".MP3") ||                        n.endsWith(".WMA") ||                        n.endsWith(".AAC") ||                        n.endsWith(".OGG") ||                        n.endsWith(".PCM") ||                        n.endsWith(".M4A") ||                        n.endsWith(".AC3") ||                        n.endsWith(".EC3") ||                        n.endsWith(".DTSHD") ||                        n.endsWith(".MKA") ||                        n.endsWith(".RA") ||                        n.endsWith(".WAV") ||                        n.endsWith(".CD") ||                        n.endsWith(".AMR") ||                        n.endsWith(".MP2") ||                        n.endsWith(".APE") ||                        n.endsWith(".DTS") ||                        n.endsWith(".FLAC") ||                        n.endsWith(".MIDI") ||                        n.endsWith(".MID") ||                        n.endsWith(".MPC") ||                        n.endsWith(".TTA") ||                        n.endsWith(".ASX") ||                        n.endsWith(".AIFF") ||                        n.endsWith(".AU"))) {            return true;        }else{            return false;        }    }

此外,还可以通过官方的方法获取设置中所有音乐的方法:

/**获取本机音乐列表*/    public static ArrayList<MusicName> getMusics() {        ArrayList<MusicName> fbList = new ArrayList<MusicName>();        Cursor c = null;        try {            c = mContentResolver.query(                    MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null,                    null, MediaStore.Audio.Media.DEFAULT_SORT_ORDER);
            AbsSuperApplication.mCancelTask = false;            while (c.moveToNext() && !AbsSuperApplication.mCancelTask) {
                String path = c.getString(c.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA));// 路径                if (!new File(path).exists()) {                    continue;                }                String name = c.getString(c.getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY_NAME)); // 歌曲名                long size = c.getLong(c.getColumnIndexOrThrow(MediaStore.Audio.Media.SIZE));// 大小                long updateTime = c.getLong(c.getColumnIndexOrThrow(MediaStore.Audio.Media.DATE_MODIFIED));// 修改时间                String fileModifiedTime = FileUtils.getModifiedTime(new File(path));                String fileSize = FileUtils.getDataSizeFormat(size);                Drawable filePic = mContext.getResources().getDrawable(R.drawable.music);
                MusicName fb = new MusicName(name, path, filePic, fileModifiedTime, fileSize, false, false);                fbList.add(fb);            }
        } catch (Exception e) {            Log.e(TAG, Log.getStackTraceString(e));        } finally {            if (c != null) {                c.close();            }        }        if(AbsSuperApplication.mCancelTask){            fbList.clear();            return null;        }        return fbList;    }

以及音乐专辑图

/**根据路径获取音乐专辑图*/    public static Drawable getMusicDrawable(String path){        try {
            MediaMetadataRetriever r = new MediaMetadataRetriever();            r.setDataSource(path);            if (r.extractMetadata(MediaMetadataRetriever.METADATA_KEY_MIMETYPE) != null) {                byte albumArt[] = r.getEmbeddedPicture();                if (albumArt != null) {                    Bitmap bitmap = BitmapFactory.decodeByteArray(albumArt, 0,                            albumArt.length);                    if(bitmap != null){                        return new BitmapDrawable(bitmap);                    }                }            }            r.release();        } catch (Exception e) {        }        return null;    }

原文发布于微信公众号 - 项勇(xiangy_life)

原文发表时间:2019-04-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券