Android開發:掃描本地音樂檔案

來源:互聯網
上載者:User

標籤:

一.前言

本來覺得so easy,真是沒想到,還搞了老半天,搞的我大汗淋漓,要拍桌子摔鍵盤了。
本想實現的功能是:
通過網易雲音樂/百度音樂/QQ音樂/酷狗音樂中一個API,通過關鍵詞/歌手/歌詞來搜尋相關歌曲資訊,然後線上播放、下載到本地,不過目前來看,使用API還是有一點問題。通過瀏覽器訪問,問題不大,例如:

但是想通過手機訪問的時候,問題就出現了,同樣的參數,結果很不一樣,而且基本搜不到自己想要的,後來換做通過自己的伺服器去訪問,還是搜不到,後來查了一下資料,暫時也沒解決。於是,目前就只是通過掃描QQ音樂已經下載的歌曲,來實現播放功能。這篇博文裡,我先記錄下掃描音樂檔案吧,至於播放和下載,後面如果自己整理好了,再貼出來。
關於網易雲音樂/百度音樂/QQ音樂/酷狗音樂API的使用,有朋友如果知道適合android的,請求推薦!

二.掃描本地音樂檔案

首先通過QQ音樂已經下載好歌。
掃描實現:

//掃描本地音樂if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){    new Thread()    {        @Override        public void run()        {            try            {            String[] ext = { ".mp3" };            File file = new File(Environment.getExternalStorageDirectory()+"/Android/data/com.tencent.qqmusic/files/qqmusic/song");//可以把"//////"這一串都去掉,掃面範圍是整個SD卡,我嫌慢,而且掃出來很多...不是我想要的歌曲,最後還是直接寫成QQ音樂的下載目錄了,其實自己的APP支援下載的話,可以把歌曲下載的指定目錄,然後掃描這個指定目錄就行了~全域掃描的確不太合適,又不是殺毒..            localMusicList = Common.searchMp3Infos(file,ext);            hander.sendEmptyMessage(SEARCH_MUSIC_SUCCESS);            }catch (Exception e){}            }        }.start();}

下面就是Common.searchMp3Infos()的代碼

//掃描實現    static List<String> list = new ArrayList<>();    public static List<String> searchMp3Infos(File file, String[] ext) {        if (file != null) {            if (file.isDirectory()) {                File[] listFile = file.listFiles();                if (listFile != null) {                    for (int i = 0; i < listFile.length; i++) {                        searchMp3Infos(listFile[i], ext);                    }                }            } else {                String filename = file.getAbsolutePath();                for (int i = 0; i < ext.length; i++) {                    if (filename.endsWith(ext[i])) {                        list.add(filename);                        break;                    }                }            }        }        return list;    }

然後在handler裡通過適配器在listview中顯示,效果就簡單像這個樣子,還是那句話,別嫌棄它醜:

嗯,先把它掃出來吧,顯示問題再改~~~

另外一個方法,自己測試了一下暫時沒掃出來,那就是從SQLite資料庫掃音樂檔案,很多朋友都提到了,但是不知道自己的問題出哪裡了,只能掃到錄音檔案~我也貼出來,供參考。

public static List<HashMap<String, Object>> getMp3Infos(Context context)    {        Cursor cursor = context.getContentResolver().query(                MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null,                null, null, null);        ArrayList mp3Infos = new ArrayList();        for (int i = 0; i < cursor.getCount(); i++) {            cursor.moveToNext();            HashMap<String, Object> musicMap = new HashMap<>();            long id = cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media._ID));//音樂id            String title = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.TITLE));//音樂標題            String artist = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST));//藝術家            String album = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM));//專輯            long albumid = cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID));//專輯id            long duration = cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.DURATION));//時間長度            long size = cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.SIZE));//檔案大小            String url = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA));//檔案路徑            int isMusic = cursor.getInt(cursor.getColumnIndex(MediaStore.Audio.Media.IS_MUSIC));//是否為音樂            if (isMusic != 0) {                musicMap.put("id",id);                musicMap.put("title",title);                musicMap.put("artist",artist);                musicMap.put("album",album);                musicMap.put("albumid",albumid);                musicMap.put("duration",duration);                musicMap.put("size",size);                musicMap.put("url",url);                musicMap.put("isMusic",isMusic);                mp3Infos.add(musicMap);            }        }        cursor.close();        return mp3Infos;    }

Android開發:掃描本地音樂檔案

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.