2016-09-23 8 views
0

특정 재생 목록을 기반으로 노래를 가져오고 싶습니다. 모든 노래의 오디오 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

도와주세요.

+0

내가했지만, – Theo

답변

0

커서가 열거되고 끝까지 도달 할 때까지 앞으로 이동해야합니다. 일단 당신이 당신의 musicCursor를 가지고 있다면, 이것과 같은 것을 사용하여 주위를 돌아 다니십시오.

   if(musicCursor!= null && musicCursor.moveToFirst()){ 
      for (musicCursor.moveToFirst(); !musicCursor.isAfterLast(); musicCursor.moveToNext()) { 
     // do your stuff here, as you cycle through your musicCursor you will read the next audio_id which then gets the relevant data 
      } 
     } 

for 루프는 커서를 나열 할 것입니다. moveto 위치를 제거하십시오, 루프 외부 uri 가져와. 이 클래스에 여러 메소드가있는 경우 맨 위로 가져 오면 모든 메소드에서 사용할 수 있지만 한 번만 정의 할 수 있습니다. 돌출을 정의하면 for 루프 외부에서 한 번만 발생하면됩니다. 조금

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); 

     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 + "=?"; 
if ((musicCursor != null) && (musicCursor.moveToFirst())) { 
     for (musicCursor.moveToFirst(); !musicCursor.isAfterLast(); musicCursor.moveToNext()) { 
     long a_id = musicCursor.getLong(musicCursor.getColumnIndex(MediaStore.Audio.Playlists.Members.AUDIO_ID)); 

     String[] selectionArgs = new String[]{"" + a_id}; //This is the id you are looking for 
     Cursor mediaCursor = musicResolver.query(mediaContentUri, projection, selection, selectionArgs, null); 
      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)); 

    } 
     } 


Log.d(TAG,"size : "+audioFiles.size()); 
return audioFiles; 
+0

내 댓글을 삭제 난 당신의 코드를 편집 한? 간단하게 작동하지 않는다는 것은 도움이되지 않습니다. –

+0

그래서 무슨 일이 후 발생하는 작동하지 않았다 – Theo

+0

사실 그건 내 잘못 이었어. 여기에 "addToPlaylist"메서드에서 잘못된 "id"를 전달하고있었습니다. 이전에 만든 재생 목록이 아닙니다. 그래서 나는 바뀌었고 코드는 잘 동작했다. 당신의 도움을 주셔서 감사합니다. –