Android掃描本地音樂文件開發(fā)案例分享
一、前言
本來覺得so easy,真是沒想到,還搞了老半天,搞的我大汗淋漓,要拍桌子摔鍵盤了。
本想實(shí)現(xiàn)的功能是:
通過網(wǎng)易云音樂/百度音樂/QQ音樂/酷狗音樂中一個(gè)API,通過關(guān)鍵詞/歌手/歌詞來搜索相關(guān)歌曲信息,然后在線播放、下載到本地,不過目前來看,使用API還是有一點(diǎn)問題。通過瀏覽器訪問,問題不大,例如下圖:
但是想通過手機(jī)訪問的時(shí)候,問題就出現(xiàn)了,同樣的參數(shù),結(jié)果很不一樣,而且基本搜不到自己想要的,后來換做通過自己的服務(wù)器去訪問,還是搜不到,后來查了一下資料,暫時(shí)也沒解決。于是,目前就只是通過掃描QQ音樂已經(jīng)下載的歌曲,來實(shí)現(xiàn)播放功能。這篇博文里,我先記錄下掃描音樂文件吧,至于播放和下載,后面如果自己整理好了,再貼出來。
關(guān)于網(wǎng)易云音樂/百度音樂/QQ音樂/酷狗音樂API的使用,有朋友如果知道適合Android的,請(qǐng)求推薦!
二、掃描本地音樂文件
首先通過QQ音樂已經(jīng)下載好歌。
掃描實(shí)現(xiàn):
//掃描本地音樂 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");//可以把"http://////"這一串都去掉,掃面范圍是整個(gè)SD卡,我嫌慢,而且掃出來很多...不是我想要的歌曲,最后還是直接寫成QQ音樂的下載目錄了,其實(shí)自己的APP支持下載的話,可以把歌曲下載的指定目錄,然后掃描這個(gè)指定目錄就行了~全局掃描的確不太合適,又不是殺毒.. localMusicList = Common.searchMp3Infos(file,ext); hander.sendEmptyMessage(SEARCH_MUSIC_SUCCESS); }catch (Exception e){} } }.start(); }
下面就是Common.searchMp3Infos()的代碼
//掃描實(shí)現(xiàn) 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中顯示,效果就簡單像這個(gè)樣子,還是那句話,別嫌棄它丑:
嗯,先把它掃出來吧,顯示問題再改~~~
另外一個(gè)方法,自己測試了一下暫時(shí)沒掃出來,那就是從SQLite數(shù)據(jù)庫掃音樂文件,很多朋友都提到了,但是不知道自己的問題出哪里了,只能掃到錄音文件~我也貼出來,供參考。
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));//音樂標(biāo)題 String artist = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST));//藝術(shù)家 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));//時(shí)長 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; }
以上就是本文的全部內(nèi)容,希望對(duì)大家學(xué)習(xí)Android軟件編程有所幫助。
- Android基于zxing的二維碼(網(wǎng)格)掃描 仿支付寶網(wǎng)格掃描
- Android實(shí)現(xiàn)二維碼掃描和生成的簡單方法
- Android開發(fā)框架之自定義ZXing二維碼掃描界面并解決取景框拉伸問題
- Android基于google Zxing實(shí)現(xiàn)各類二維碼掃描效果
- Android中加入名片掃描功能實(shí)例代碼
- Android應(yīng)用中使用ContentProvider掃描本地圖片并顯示
- Android平臺(tái)生成二維碼并實(shí)現(xiàn)掃描 & 識(shí)別功能
- Android波紋擴(kuò)散效果之仿支付寶咻一咻功能實(shí)現(xiàn)波紋擴(kuò)散特效
- Android app第三方支付寶支付接入教程
- Android實(shí)現(xiàn)支付寶AR掃描動(dòng)畫效果
相關(guān)文章
Android實(shí)現(xiàn)Neumorphism?UI控件
大家好,本篇文章主要講的是Android實(shí)現(xiàn)Neumorphism?UI控件,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下2022-02-02Kotlin HttpURLConnection與服務(wù)器交互實(shí)現(xiàn)方法詳解
簡單來說,HttpURLConnection 是發(fā)起HTTP請(qǐng)求的基礎(chǔ)類庫,提供了HTTP請(qǐng)求的基本功能,不過封裝的比較少,在使用時(shí)很多內(nèi)容都需要自己設(shè)置,也需要自己處理請(qǐng)求流和響應(yīng)流2022-09-09Android Google AutoService框架使用詳解
AutoService是Google開發(fā)一個(gè)自動(dòng)生成SPI清單文件的框架。看過一些基于APT的三方框架源碼的讀者應(yīng)該有所了解。比如Arouter、EventBus等等2022-11-11Android實(shí)現(xiàn)強(qiáng)制下線功能的示例代碼
這篇文章主要介紹了Android實(shí)現(xiàn)強(qiáng)制下線功能的示例代碼,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07Android ListView的OnItemClickListener詳解
這篇文章主要介紹了Android ListView的OnItemClickListener詳解的相關(guān)資料,涉及到OnItemClickListener的position和id參數(shù)做詳細(xì)的解釋的知識(shí)點(diǎn),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下2016-07-07Android?kotlin?跳轉(zhuǎn)手機(jī)熱點(diǎn)開關(guān)頁面和判斷熱點(diǎn)是否打開(親測可用)
跳轉(zhuǎn)手機(jī)熱點(diǎn)的頁面肯定是用intent,重點(diǎn)是action不知道是什么,網(wǎng)上最常見的就是Settings.ACTION_WIFI_SETTINGS 跳轉(zhuǎn)wifi設(shè)置頁面,本文介紹Android?kotlin?跳轉(zhuǎn)手機(jī)熱點(diǎn)開關(guān)頁面和判斷熱點(diǎn)是否打開,感興趣的朋友一起看看吧2023-08-08Android自定義PasswordInputView密碼輸入
這篇文章主要為大家詳細(xì)介紹了Android自定義PasswordInputView密碼輸入功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-08-08