亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Android掃描本地音樂(lè)文件開(kāi)發(fā)案例分享

 更新時(shí)間:2016年05月24日 14:11:30   作者:不正經(jīng)的小二哥  
這篇文章主要為大家分享了Android掃描本地音樂(lè)文件開(kāi)發(fā)案例,感興趣的小伙伴們可以參考一下

一、前言

本來(lái)覺(jué)得so easy,真是沒(méi)想到,還搞了老半天,搞的我大汗淋漓,要拍桌子摔鍵盤(pán)了。
本想實(shí)現(xiàn)的功能是:
通過(guò)網(wǎng)易云音樂(lè)/百度音樂(lè)/QQ音樂(lè)/酷狗音樂(lè)中一個(gè)API,通過(guò)關(guān)鍵詞/歌手/歌詞來(lái)搜索相關(guān)歌曲信息,然后在線播放、下載到本地,不過(guò)目前來(lái)看,使用API還是有一點(diǎn)問(wèn)題。通過(guò)瀏覽器訪問(wèn),問(wèn)題不大,例如下圖:

但是想通過(guò)手機(jī)訪問(wèn)的時(shí)候,問(wèn)題就出現(xiàn)了,同樣的參數(shù),結(jié)果很不一樣,而且基本搜不到自己想要的,后來(lái)?yè)Q做通過(guò)自己的服務(wù)器去訪問(wèn),還是搜不到,后來(lái)查了一下資料,暫時(shí)也沒(méi)解決。于是,目前就只是通過(guò)掃描QQ音樂(lè)已經(jīng)下載的歌曲,來(lái)實(shí)現(xiàn)播放功能。這篇博文里,我先記錄下掃描音樂(lè)文件吧,至于播放和下載,后面如果自己整理好了,再貼出來(lái)。
關(guān)于網(wǎng)易云音樂(lè)/百度音樂(lè)/QQ音樂(lè)/酷狗音樂(lè)API的使用,有朋友如果知道適合Android的,請(qǐng)求推薦!

二、掃描本地音樂(lè)文件

首先通過(guò)QQ音樂(lè)已經(jīng)下載好歌。
掃描實(shí)現(xiàn):

//掃描本地音樂(lè)
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卡,我嫌慢,而且掃出來(lái)很多...不是我想要的歌曲,最后還是直接寫(xiě)成QQ音樂(lè)的下載目錄了,其實(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里通過(guò)適配器在listview中顯示,效果就簡(jiǎn)單像這個(gè)樣子,還是那句話,別嫌棄它丑:

嗯,先把它掃出來(lái)吧,顯示問(wèn)題再改~~~

另外一個(gè)方法,自己測(cè)試了一下暫時(shí)沒(méi)掃出來(lái),那就是從SQLite數(shù)據(jù)庫(kù)掃音樂(lè)文件,很多朋友都提到了,但是不知道自己的問(wèn)題出哪里了,只能掃到錄音文件~我也貼出來(lái),供參考。

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));//音樂(lè)id
      String title = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.TITLE));//音樂(lè)標(biāo)題
      String artist = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST));//藝術(shù)家
      String album = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM));//專(zhuān)輯
      long albumid = cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID));//專(zhuān)輯id
      long duration = cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.DURATION));//時(shí)長(zhǎng)
      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));//是否為音樂(lè)
      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;
  }

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家學(xué)習(xí)Android軟件編程有所幫助。

相關(guān)文章

  • Android實(shí)現(xiàn)Neumorphism?UI控件

    Android實(shí)現(xiàn)Neumorphism?UI控件

    大家好,本篇文章主要講的是Android實(shí)現(xiàn)Neumorphism?UI控件,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-02-02
  • Android PicSelector圖片選擇器小功能

    Android PicSelector圖片選擇器小功能

    這篇文章主要為大家詳細(xì)介紹了Android PicSelector圖片選擇器小功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Android Service中方法使用詳細(xì)介紹

    Android Service中方法使用詳細(xì)介紹

    這篇文章主要介紹了android service中方法使用詳細(xì)介紹的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-09-09
  • Kotlin HttpURLConnection與服務(wù)器交互實(shí)現(xiàn)方法詳解

    Kotlin HttpURLConnection與服務(wù)器交互實(shí)現(xiàn)方法詳解

    簡(jiǎn)單來(lái)說(shuō),HttpURLConnection 是發(fā)起HTTP請(qǐng)求的基礎(chǔ)類(lèi)庫(kù),提供了HTTP請(qǐng)求的基本功能,不過(guò)封裝的比較少,在使用時(shí)很多內(nèi)容都需要自己設(shè)置,也需要自己處理請(qǐng)求流和響應(yīng)流
    2022-09-09
  • Android Google AutoService框架使用詳解

    Android Google AutoService框架使用詳解

    AutoService是Google開(kāi)發(fā)一個(gè)自動(dòng)生成SPI清單文件的框架??催^(guò)一些基于APT的三方框架源碼的讀者應(yīng)該有所了解。比如Arouter、EventBus等等
    2022-11-11
  • Android實(shí)現(xiàn)強(qiáng)制下線功能的示例代碼

    Android實(shí)現(xiàn)強(qiáng)制下線功能的示例代碼

    這篇文章主要介紹了Android實(shí)現(xiàn)強(qiáng)制下線功能的示例代碼,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • Android ListView的OnItemClickListener詳解

    Android ListView的OnItemClickListener詳解

    這篇文章主要介紹了Android ListView的OnItemClickListener詳解的相關(guān)資料,涉及到OnItemClickListener的position和id參數(shù)做詳細(xì)的解釋的知識(shí)點(diǎn),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下
    2016-07-07
  • Android?kotlin?跳轉(zhuǎn)手機(jī)熱點(diǎn)開(kāi)關(guān)頁(yè)面和判斷熱點(diǎn)是否打開(kāi)(親測(cè)可用)

    Android?kotlin?跳轉(zhuǎn)手機(jī)熱點(diǎn)開(kāi)關(guān)頁(yè)面和判斷熱點(diǎn)是否打開(kāi)(親測(cè)可用)

    跳轉(zhuǎn)手機(jī)熱點(diǎn)的頁(yè)面肯定是用intent,重點(diǎn)是action不知道是什么,網(wǎng)上最常見(jiàn)的就是Settings.ACTION_WIFI_SETTINGS 跳轉(zhuǎn)wifi設(shè)置頁(yè)面,本文介紹Android?kotlin?跳轉(zhuǎn)手機(jī)熱點(diǎn)開(kāi)關(guān)頁(yè)面和判斷熱點(diǎn)是否打開(kāi),感興趣的朋友一起看看吧
    2023-08-08
  • Android中AlarmManager基本用法分析

    Android中AlarmManager基本用法分析

    這篇文章主要介紹了Android中AlarmManager基本用法,結(jié)合實(shí)例形式簡(jiǎn)單分析了AlarmManager的基本類(lèi)型、方法及簡(jiǎn)單使用示例,需要的朋友可以參考下
    2016-08-08
  • Android自定義PasswordInputView密碼輸入

    Android自定義PasswordInputView密碼輸入

    這篇文章主要為大家詳細(xì)介紹了Android自定義PasswordInputView密碼輸入功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-08-08

最新評(píng)論