Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android開發:掃描本地音樂文件

Android開發:掃描本地音樂文件

編輯:關於Android編程

一.前言

本來覺得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 list = new ArrayList<>();
    public static List 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中顯示,效果就簡單像這個樣子,還是那句話,別嫌棄它丑:
這裡寫圖片描述

嗯,先把它掃出來吧,顯示問題再改~~~<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxwPsHtzeLSu7j2t723qKOs19S8urLiytTBy9K7z8LU3cqxw7vJqLP2wLSjrMTHvs3Kx7TTU1FMaXRlyv2+3b/iyajS9MDWzsS8/qOsuty24MXz09G2vMzhtb3By6OstavKx7K71qq1wNfUvLq1xM7KzOKz9sTEwO/By6Os1rvE3Mmotb3CvNL0zsS8/n7O0tKyzPmz9sC0o6y5qbLOv7yhozwvcD4NCjxwcmUgY2xhc3M9"brush:java;"> public static List> 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 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; }

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved