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;
}
이상 은 본 고의 모든 내용 입 니 다.여러분 이 안 드 로 이 드 소프트웨어 프로 그래 밍 을 배 우 는 데 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.