2016-09-14 1 views
0

J'essaie de comprendre une requête MediaStore qui va chercher toutes les chansons membres d'un Playlist. Cependant, le List retourne toujours vide sans résultat (même après avoir notifié l'adaptateur). Voici ce que im en train de faire ...La requête pour afficher les listes de lecture revient vide?

Obtenir Chansons Playlist Méthode

ContentResolver musicResolver = getActivity().getContentResolver(); 
    Uri musicUri = MediaStore.Audio.Playlists.Members.getContentUri("external", playlistID); 
    Cursor musicCursor = musicResolver.query(musicUri, null, null, null, null); 

    if(musicCursor!=null && musicCursor.moveToFirst()){ 
     //get columns 
     int idColumn = musicCursor.getColumnIndex 
       (MediaStore.Audio.Playlists.Members.AUDIO_ID); 
     int titleColumn = musicCursor.getColumnIndex 
       (MediaStore.Audio.Playlists.Members.TITLE); 
     int artistColumn = musicCursor.getColumnIndex 
       (MediaStore.Audio.Playlists.Members.ARTIST); 
     int albumColumn = musicCursor.getColumnIndex 
       (MediaStore.Audio.Playlists.Members.ALBUM); 
     int pathColumn = musicCursor.getColumnIndex 
       (MediaStore.Audio.Playlists.Members.DATA); 
     //add songs to list 
     do { 
      long thisId = musicCursor.getLong(idColumn); 
      String thisTitle = musicCursor.getString(titleColumn); 
      String thisArtist = musicCursor.getString(artistColumn); 
      String thisAlbum = musicCursor.getString(albumColumn); 
      String thisPath = musicCursor.getString(pathColumn); 
      songList.add(new Song(thisId, thisTitle, thisArtist, thisAlbum, thisPath)); 
     } 
     while (musicCursor.moveToNext()); 
    } 
    musicCursor.close(); 

Et voici comment j'ajouter les valeurs dans la liste de lecture en utilisant son ID ...

Ajouter Playlist Méthode Songs

public static void addToPlaylist(ContentResolver resolver, long audioId, String title, String artist, String album, String path) { 

    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(); 
    cur.close(); 
    ContentValues values = new ContentValues(); 
    values.put(MediaStore.Audio.Playlists.Members.AUDIO_ID, audioId); 
    values.put(MediaStore.Audio.Playlists.Members.TITLE, title); 
    values.put(MediaStore.Audio.Playlists.Members.ARTIST, artist); 
    values.put(MediaStore.Audio.Playlists.Members.ALBUM, album); 
    values.put(MediaStore.Audio.Playlists.Members.DATA, path); 
    resolver.insert(uri, values); 
} 

Une suggestion? Merci!

Répondre

-1

Désolé, il a fallu un peu de temps j'étais en vacances. Pour ajouter à une liste de lecture, vous avez simplement besoin de l'audio_id et de l'play_order et de l'playlist_id bien sûr. Le code ci-dessous a curseur et une clause where car cela vous permet d'ajouter plus d'une piste, mais il n'est pas nécessaire si vous avez le audio_id déjà

  ContentResolver resolver = context.getContentResolver(); 
    Uri exturi = MediaStore.Audio.Playlists.Members.getContentUri(
      "external", playlist_id); 
    where = MediaStore.Audio.Media._ID + "=?"; 
    String[] whereVal = {music_id}; 

    Uri mediauri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; 
    Cursor c = resolver.query(mediauri, projection, where, whereVal, 
      null); 

    if (c != null && c.moveToFirst()) { 
     int idColumn = c.getColumnIndex(MediaStore.Audio.Media._ID); 
     ContentValues values = new ContentValues(); 

     for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) { 
      String audio_id = c.getString(idColumn); 
      values.put(MediaStore.Audio.Playlists.Members.PLAY_ORDER, base); 
      values.put(MediaStore.Audio.Playlists.Members.AUDIO_ID, audio_id); 
      resolver.insert(exturi, values); 
      base++; 
     } 
     c.close(); 
    } 

Pour obtenir toutes les pistes sur une liste de lecture, j'ai le code suivant :

  public Cursor getPlaylistTracks(Context context, Long playlist_id) { 
    Uri newuri = MediaStore.Audio.Playlists.Members.getContentUri(
      "external", playlist_id); 
    ContentResolver resolver = context.getContentResolver(); 
    String _id = MediaStore.Audio.Playlists.Members._ID; 
    String audio_id = MediaStore.Audio.Playlists.Members.AUDIO_ID; 
    String artist = MediaStore.Audio.Playlists.Members.ARTIST; 
    String album = MediaStore.Audio.Playlists.Members.ALBUM; 
    String album_id = MediaStore.Audio.Playlists.Members.ALBUM_ID; 
    String title = MediaStore.Audio.Playlists.Members.TITLE; 
    String duration = MediaStore.Audio.Playlists.Members.DURATION; 
    String location = MediaStore.Audio.Playlists.Members.DATA; 
    String composer = MediaStore.Audio.Playlists.Members.COMPOSER; 
    String playorder = MediaStore.Audio.Playlists.Members.PLAY_ORDER; 

    String date_modified = MediaStore.Audio.Playlists.Members.DATE_MODIFIED; 
    String[] columns = {_id, audio_id, artist, album_id, album, title, duration, 
      location, date_modified, playorder, composer}; 
    return resolver.query(newuri, columns, null, null, null); 

} 

J'espère que cette aide

+0

Je ne comprends pas pourquoi quelqu'un a voté contre cela sans expliquer – Theo