[안드로이드] 다른 앱에서 재생 중인 음악의 파일 경로를 가져 올 수 있는 방법이 있을까요?


마시멜로부터 권한 관련되서 바뀌어 버린터라.. 지원 중단 된 기존 앱을 이용 할 수 없어 직접 제작 중에 있습니다. 소니에서 제공하는 익스텐션을 통하여 소니 음악 앱에서 음악 정보를 가져오고 싶은데 제조사 예제에서는 getIntent() 사용하더라구요.. 근데 이 방법은 트랙을 넘길 경우에 다음곡을 가져오지 못하고 처음에 가져온 음악만 계속 가져오네요 ㅠㅠ 혹시 방법이 있을까요?


  • 소니에서 제공하는 API 문서와 지원 중단 되었다는 기존 앱의 정보를 알려주실 수 있을까요?    한로니로니   2016.5.31 12:21     
조회수 260


1 답변


좋아요
1
싫어요
채택취소하기

뮤직 앱에서 음원이 재생될 때 브로드캐스트 리시버를 통해 현재 재생 중인 음원의 정보를 (다른 앱에서도) 수신 받을 수 있습니다. 브로드캐스트 리시버를 통해 전달된 음원의 정보를 이용해서 폰의 미디어 DB를 쿼리하면 현재 재생 중인 음원의 파일 경로를 가져올 수 있습니다.

조금 더 자세히 설명을 하면 브로드캐스트 리시버로 전달되는 Intent에는 다음과 같은 정보가 담겨있습니다.

action: com.android.music.playstatechanged
[duration=287124]
[playstate=false]
[woodstock=false]
[currentContainerName=Stop the Clocks]
[artist=Oasis]
[domain=0]
[currentSongLoaded=true]
[preparing=false]
[isPodcast=false]
[rating=0]
[albumId=920369031]
[songId=1303]
[currentContainerTypeValue=7]
[currentContainerId=920369031]
[playing=false]
[streaming=false]
[inErrorState=false]
[currentContainerExtData=null]
[album=Stop the Clocks]
[local=true]
[track=Dont Look Back in Anger]
[videoId=null]
[position=9394]
[currentContainerExtId=null]
[videoThumbnailUrl=null]
[isDoubleclickAd=false]
[supportsRating=true]
[ListSize=1]
[previewPlayType=-1]
[trackMetajamId=null]
[isSoundAd=false]
[isSkipLimitReached=false]
[ListPosition=0]

참고로 댬겨있는 정보의 양은 뮤직 앱에 따라 다릅니다. 위 결과는 넥서스 6P의 구글뮤직 앱으로 확인한 결과입니다.

몇몇 뮤직 앱에서 테스트를 해보니 위 정보 중 track이 타이틀을 의미하고요. 이 track 정보를 이용해서 다음과 같이 미디어 DB를 쿼리해 DATA 컬럼에 담겨있는 정보를 가져오면 음원의 파일 경로를 알 수 있습니다. (예외처리는 되어있지 않으니 참고만 하세요)

Cursor cursor = null;
try {
    cursor = getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
        null,
        MediaStore.Audio.Media.TITLE_KEY + "=?",
        new String[] {MediaStore.Audio.keyFor(intent.getExtras().getString("track"))},
        null);
    if (cursor != null) {
        List<String> paths = new ArrayList<>();
        while (cursor.moveToNext()) {
            String path = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA));
            paths.add(path);
        }
    }
} finally {
    if (cursor != null) {
        cursor.close();
    }
}

구글뮤직에서 음원 재생 후 위 코드를 이용하면 재생 중인 음원의 경로를 다음과 같이 가져올 수 있습니다.

[/storage/emulated/0/KakaoTalkDownload/oasis_Dont_Look_Back_in_Anger.mp3]

추가로 뮤직앱들이 전달하는 인텐트의 액션이 제각각이어서 동작하지 않을 수 있으니 관련 사항은. 다음글을 참고하세요.


  • 덧글에 답변도 못 드렸는데 답변 감사드립니다 (꾸벅) 소니 음악앱 경우에는 TRACK_NAME으로 되어 있네요.    Junesung Lee   2016.6.2 07:54     

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close