Android 로 컬 음악 파일 스 캔 개발 사례 공유

머리말
원래 so easy 라 고 생각 했 는데 정말 생각 지도 못 했 어 요.한참 동안 했 더 니 땀 을 뻘 뻘 흘 려 서 책상 을 두 드 리 고 키 보드 를 떨 어 뜨 려 야 겠 어 요.
이 루 고 싶 었 던 기능 은:
왕 이 클 라 우 드 음악/바 이 두 음악/QQ 음악/쿠 거 음악 중 하나의 API 를 통 해 키워드/가수/가 사 를 통 해 관련 노래 정 보 를 검색 한 후 온라인 으로 재생,다운로드 하 는 것 은 현재 로 서 는 API 사용 에 문제 가 있다.브 라 우 저 를 통 해 접근 하면 문제 가 크 지 않 습 니 다.예 를 들 어 다음 그림:

하지만 휴대 전 화 를 통 해 접근 하려 고 할 때 문제 가 발생 했 습 니 다.같은 매개 변 수 는 결과 가 다 르 고 원 하 는 것 을 거의 찾 지 못 했 습 니 다.나중에 자신의 서버 를 통 해 방문 하 는 것 으로 바 뀌 었 지만 찾 지 못 했 습 니 다.나중에 자 료 를 찾 아 보 았 지만 아직 해결 되 지 않 았 습 니 다.그래서 지금 은 QQ 음악 이 다 운 받 은 노래 를 스 캔 해서 재생 기능 을 하 는 것 이다.이 블 로그 에 서 는 제 가 먼저 음악 파일 을 스 캔 하 는 것 을 기록 하 겠 습 니 다.재생 과 다운로드 에 대해 서 는 나중에 스스로 정리 한 후에 붙 입 니 다.
왕 이 클 라 우 드 음악/바 이 두 음악/QQ 음악/쿨 개 음악 API 사용 에 대해 안 드 로 이 드 에 적합 한 것 을 알 고 있다 면 추천 을 요청 합 니 다!
로 컬 음악 파일 검색
우선 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;
  }
이상 은 본 고의 모든 내용 입 니 다.여러분 이 안 드 로 이 드 소프트웨어 프로 그래 밍 을 배 우 는 데 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기