2014-06-07 2 views
0

재생 목록에서 중복 노래를 삭제하려고합니다. 이것은 재생 목록에서 노래를 삭제하는 데 사용하는 코드입니다.Android : 재생 목록에서 중복 항목 삭제

public static void removeFromPlaylist(final Context context, final long id, 
      final long playlistId) { 
     final Uri uri = MediaStore.Audio.Playlists.Members.getContentUri("external", playlistId); 
     final ContentResolver resolver = context.getContentResolver(); 
     int del = resolver.delete(uri, Playlists.Members.AUDIO_ID + " = ? ", new String[] { 
      Long.toString(id) 
     }); 
     Log.e("DeleteFromPlaylist",""+del); 
    } 

하지만 여기서 문제는 모든 노래를 삭제한다는 것입니다. 재생 목록 Playlist1에 'SongOne'을 3 번 추가했다고 가정 해 보겠습니다. 제거 할 때 'SongOne'은 한 번만 제거해야하지만 여기에서는 3 곡 모두 삭제됩니다. 로그에서 '3'을 얻습니다. 그래서 어떤 수정을 코드에해야합니까 ContentResolver.delete() 한 번만 삭제합니까?

감사합니다.

+0

이 그 ID를 가진 모든 노래를 삭제하면 삭제 한 후 그 노래를 삽입 할 수 있습니다 또는 당신은 사람들의 행 ID를 얻을 당신이 정교한 ID –

+0

있는 사람을 삭제할 수 있습니다 행 ID 가져 오기 및 삭제 중? – PsyGik

답변

1

다음 코드를 사용할 수 있습니다.이 코드는 전체 코드가 아니므로이 영역에 IDE가 없기 때문에 테스트해야합니다. 당신이 중복 songId 하나의 노래를 삭제하기 때문에

final Uri uri = MediaStore.Audio.Playlists.Members.getContentUri("external", playlistId); 
    final ContentResolver resolver = context.getContentResolver(); 
    Cursor cursor = resolver.query(uri,null , Playlists.Members.AUDIO_ID + " = ? ", new String[] { 
     Long.toString(id)} , null , null); 

List<Long> ids = new ArrayList<Long>(); 
if (cursor != null) 
    while (cursor.moveToNext()) 
    { 
     ids.add (cursor.getLong(cursor.getColumnIndex("id"))); // you need get id of song, this might be id 

    } 

for (int i = 1 ; i < ids.size() ; i++) // skip first index in list 
    resolver.delete(uri, "id" + " = ? ", new String[] { 
     Long.toString(ids.get(i)) }); 
+0

완벽. 당신이 말한대로 조금 수정했다. 또한 for 루프를 사용하지 않았습니다. 하나의 항목 만 제거하려고했습니다. 그래서 저는 ids.get (0)을했습니다. 그러나 단점은 재생 목록에서 세 번째 항목을 삭제하면 UI에서 첫 번째 항목을 삭제합니다. – PsyGik

+0

@PsyGik이 (가) 당신의 수정 사항이 중요하다고 생각하시면 기꺼이 도와 드리겠습니다. 내 게시물을 편집 할 수 있습니다. –