특정 재생 목록을 기반으로 노래를 가져오고 싶습니다. 모든 노래의 오디오 ID를 가져 오지만 제목, 아티스트, 앨범 등의 정보를 얻지 못했습니다. this 그건 내 문제와 같은 문제 야.
내가 재생 목록에 노래를 추가 해요 방법이 있습니다 :재생 목록에서 가져온 오디오 ID를 가지고있는 동안 노래를 찾을 수 없습니다.
public static void addToPlaylist(ContentResolver resolver, long audioId, int playlistId) {
String[] cols = new String[] {
"count(*)"
};
Uri uri = MediaStore.Audio.Playlists.Members.getContentUri("external", playlistId);
Cursor cur = resolver.query(uri, cols, null, null, null);
cur.moveToFirst();
final int base = cur.getInt(0);
cur.close();
ContentValues values = new ContentValues();
values.put(MediaStore.Audio.Playlists.Members.PLAY_ORDER, Integer.valueOf(base +(int) audioId));
values.put(MediaStore.Audio.Playlists.Members.AUDIO_ID, audioId);
Uri u =resolver.insert(uri, values);
Log.d("ItemFragment", "Added Playlist Item: " + u + " for AUDIO_ID " + audioId+" and PLAYLIST_ID = "+playlistId);
}
을하고이 같은 특정 재생 목록에서 노래를 검색 :
public ArrayList<AudioFile> getSongListFromPlayList() {
ArrayList<AudioFile> audioFiles = new ArrayList<>();
String[] proj = { MediaStore.Audio.Playlists.Members.AUDIO_ID};
Cursor musicCursor = musicResolver.query(MediaStore.Audio.Playlists.Members.getContentUri("external",id)
, proj, null, null, null);
int x = 0;
Log.d(TAG,"cursor count : "+musicCursor.getCount());
if ((musicCursor != null) && (musicCursor.moveToFirst())) {
do {
long a_id = musicCursor.getLong(musicCursor.getColumnIndex(MediaStore.Audio.Playlists.Members.AUDIO_ID));
Uri mediaContentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
String[] projection = new String[]{MediaStore.Audio.Media._ID, MediaStore.Audio.Media.ARTIST, MediaStore.Audio.Media.TITLE, MediaStore.Audio.Media.ALBUM,
MediaStore.Audio.Media.DURATION, MediaStore.Audio.Media.DATA, MediaStore.Audio.Media.ALBUM_ID};
String selection = MediaStore.Audio.Media._ID + "=?";
String[] selectionArgs = new String[]{"" + a_id}; //This is the id you are looking for
Cursor mediaCursor = musicResolver.query(mediaContentUri, projection, selection, selectionArgs, null);
Log.d(TAG,"second cursor count : "+mediaCursor.getCount());
if (mediaCursor.getCount() > 0) {
mediaCursor.moveToPosition(0);
String title = mediaCursor.getString(mediaCursor.getColumnIndex(MediaStore.Audio.Media.TITLE));
String album = mediaCursor.getString(mediaCursor.getColumnIndex(MediaStore.Audio.Media.ALBUM));
String artist = mediaCursor.getString(mediaCursor.getColumnIndex(MediaStore.Audio.Media.ARTIST));
String data = mediaCursor.getString(mediaCursor.getColumnIndex(MediaStore.Audio.Media.DATA));
String duration = mediaCursor.getString(mediaCursor.getColumnIndex(MediaStore.Audio.Media.DURATION));
long id = mediaCursor.getLong(mediaCursor.getColumnIndex(MediaStore.Audio.Media._ID));
audioFiles.add(new AudioFile(id,title,artist,data,duration,x));
x++;
}
}while (musicCursor.moveToNext());
}
Log.d(TAG,"size : "+audioFiles.size());
return audioFiles;
}
을 내가 로그받을 디버깅하는 동안 :
D/SecondActivity : 커서 개수 : 11
D/SecondActivity : 두 번째 커서 개수 : 1
D/SecondActivity : 제 커서 횟수 : 0
D/SecondActivity : 제 커서 횟수 : 0
D/SecondActivity : 제 커서 횟수 : 0
D/SecondActivity : 제 커서 횟수 : 0
D/SecondActivity : 제 커서 횟수 : 0
D/SecondActivity : 제 커서 횟수 : 0
D/SecondActivity : 제 커서 횟수 : 0
D/SecondActivity : 제 커서 횟수 : 0
D/SecondActivity : 제 커서 횟수 : 0
D/SecondActivity : 두 번째 커서 개수 : 0
D/SecondActivity : 크기 : 1
도와주세요.
내가했지만, – Theo