2010-07-06 17 views
11

¿Alguien sabe cómo agregar listas de reproducción a Android en el código?Android Crear lista de reproducción

Creo que tengo que insertarlo en la resolución de contenido, pero ¿tengo que poner la identificación de la canción o tengo que poner toda la información de la canción?

He estado buscando un código de muestra pero no he encontrado ninguno.

EDIT: encontrado una respuesta aquí es cómo lo hago:

public static void addToPlaylist(ContentResolver resolver, int audioId) { 

     String[] cols = new String[] { 
       "count(*)" 
     }; 
     Uri uri = MediaStore.Audio.Playlists.Members.getContentUri("external", YOUR_PLAYLIST_ID); 
     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 + audioId)); 
     values.put(MediaStore.Audio.Playlists.Members.AUDIO_ID, audioId); 
     resolver.insert(uri, values); 
    } 

    public static void removeFromPlaylist(ContentResolver resolver, int audioId) { 
     Log.v("made it to add",""+audioId); 
     String[] cols = new String[] { 
       "count(*)" 
     }; 
     Uri uri = MediaStore.Audio.Playlists.Members.getContentUri("external", YOUR_PLAYLIST_ID); 
     Cursor cur = resolver.query(uri, cols, null, null, null); 
     cur.moveToFirst(); 
     final int base = cur.getInt(0); 
     cur.close(); 
     ContentValues values = new ContentValues(); 

     resolver.delete(uri, MediaStore.Audio.Playlists.Members.AUDIO_ID +" = "+audioId, null); 
    } 
+4

Estoy tratando de entender la código ... En addToPlaylist, ¿está estableciendo la propiedad PLAY_ORDER en + ? ¿Eso significa que PLAY_ORDER no es un índice de seguimiento o que audioId no es el único identificador de la canción en el dispositivo? –

+0

Además, ¿cuál es la lista de reproducción que se supone que es? Parece que este código solo agrega elementos a las listas de reproducción. ¿Hay alguna forma de * crear * una lista de reproducción? – Yang

+1

Si resolvió el problema usted mismo, muévase a crear una respuesta y márquela como aceptada. –

Respuesta

11

Para llegar a la pregunta de "no contesta" He pegado el código de la OP aquí:

public static void addToPlaylist(ContentResolver resolver, int audioId) { 

     String[] cols = new String[] { 
       "count(*)" 
     }; 
     Uri uri = MediaStore.Audio.Playlists.Members.getContentUri("external", YOUR_PLAYLIST_ID); 
     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 + audioId)); 
     values.put(MediaStore.Audio.Playlists.Members.AUDIO_ID, audioId); 
     resolver.insert(uri, values); 
    } 

    public static void removeFromPlaylist(ContentResolver resolver, int audioId) { 
     Log.v("made it to add",""+audioId); 
     String[] cols = new String[] { 
       "count(*)" 
     }; 
     Uri uri = MediaStore.Audio.Playlists.Members.getContentUri("external", YOUR_PLAYLIST_ID); 
     Cursor cur = resolver.query(uri, cols, null, null, null); 
     cur.moveToFirst(); 
     final int base = cur.getInt(0); 
     cur.close(); 
     ContentValues values = new ContentValues(); 

     resolver.delete(uri, MediaStore.Audio.Playlists.Members.AUDIO_ID +" = "+audioId, null); 
    } 
+0

Gracias, no estaba seguro de poder responder a mis propias preguntas en ese momento :) – shaneburgess

+0

¿Alguna idea sobre cómo crear una nueva lista de reproducción por nombre? –

+2

@aloneguid Puede intentar: public static void createPlaylist (ContentResolver resolver, String pName) { Uri uri = MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI; ContentValues ​​values ​​= new ContentValues ​​(); values.put (MediaStore.Audio.Playlists.NAME, pName); Uri newPlaylistUri = resolver.insert (uri, values); Console.debug (TAG, "newPlaylistUri:" + newPlaylistUri, Console.Liviu); } –

2

Para Responda el comentario de Jaroslav Záruba, el código es mejor con el PLAY_ORDER de la pista agregada establecida de la siguiente manera:

cur.moveToLast(); 
final int base = cur.getInt(cur.getColumnIndex(Playlists.Members.PLAY_ORDER)); 
cur.close(); 
ContentValues values = new ContentValues(); 
values.put(MediaStore.Audio.Playlists.Members.PLAY_ORDER, 
     Integer.valueOf(base + 1)); 

Dos cosas importantes cambian: usamos el último elemento de la lista de reproducción (cur.moveToLast()) y agregamos 1 a su valor PLAY_ORDER para determinar el PLAY_ORDER de la nueva pista. El punto es tener pistas sucesivas en la lista de reproducción.

También puede agregar 10 por ejemplo para poder insertar pistas antes o después de su nueva pista. También cambié la forma en que obtuvimos el id de seguimiento. De hecho, no queremos tener ningún problema para obtener datos incorrectos, por lo que especificamos la columna que queremos.

+2

cómo recuperar YOUR_PLAYLIST_ID –

0

Esto se corrige código que quitar canción de reproducción:

public static void removeFromPlaylist(ContentResolver resolver, int audioId) 
{ 
Uri uri = MediaStore.Audio.Playlists.Members.getContentUri("external", YOUR_PLAYLIST_ID); 
resolver.delete(uri, MediaStore.Audio.Playlists.Members._ID +" = "+audioId, null); 
} 
0

Utilice este código en sí es auto explicativo. Se añade canción dada id = songID a lista de reproducción con el nombre playlistName

Si existe lista de reproducción ya que se sumará a las ya existentes o que creará nuevo y luego añadir la canción a ella

/** 
    * This function add song with id songID to playlist playlistName 
    * if playlist does exist it will add to exiixting one or it will create new 
    * 
    * @param playlistName 
    * @param songID 
    */ 
    private void addToPlaylist(String playlistName, int songID) { 

     //Vibrate device 
     Utils.vibrate(getApplicationContext()); 

     //get all playlists 
     Cursor playListCursor = AppController.getGlobalContentResolvere().query(
       MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI, new String[]{"*"}, null, null, 
       null); 

     long playlistId = 0; 

     playListCursor.moveToFirst(); 

     do { 

      //check if selected playlsit already exist 
      if (playListCursor.getString(playListCursor 
        .getColumnIndex(MediaStore.Audio.Playlists.NAME)). 
        equalsIgnoreCase(playlistName)) { 

       playlistId = playListCursor.getLong(playListCursor 
         .getColumnIndex(MediaStore.Audio.Playlists._ID)); 
       break; 
      } 
     } while (playListCursor.moveToNext()); 

     //Playlist doesnt exist creating new with given name 
     if (playlistId == 0) { 

      Log.d(TAG, "CREATING PLAYLIST: " + playlistName); 

      ContentValues playlisrContentValue = new ContentValues(); 

      //Add name 
      playlisrContentValue.put(MediaStore.Audio.Playlists.NAME, playlistName); 

      //update modified value 
      playlisrContentValue.put(MediaStore.Audio.Playlists.DATE_MODIFIED, 
        System.currentTimeMillis()); 

      Uri playlistURl = AppController.getGlobalContentResolvere().insert(
        MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI, playlisrContentValue); 

      Log.d(TAG, "Added PlayLIst: " + playlistURl); 

     } else { 

      //Playlist alreay exist add to playlist 
      String[] cols = new String[]{ 
        "count(*)" 
      }; 

      Uri uri = MediaStore.Audio.Playlists.Members.getContentUri("external", playlistId); 

      Cursor favListCursor = AppController.getGlobalContentResolvere().query(uri, cols, null, null, null); 

      favListCursor.moveToFirst(); 

      final int base = favListCursor.getInt(0); 

      //playlist updated delete older playlist art so that we can create new 
      Toast.makeText(AudioPlayerActivity.this, "deleted old file" + new File(AppContants.PLAY_LIST_DIR + playlistId + ".png").delete(), Toast.LENGTH_SHORT).show(); 

      favListCursor.close(); 

      //add song to last 
      ContentValues values = new ContentValues(); 

      values.put(MediaStore.Audio.Playlists.Members.PLAY_ORDER, base + songID); 

      values.put(MediaStore.Audio.Playlists.Members.AUDIO_ID, songID); 

      AppController.getGlobalContentResolvere().insert(uri, values); 


      //Debug purpose 
      Toast.makeText(AudioPlayerActivity.this, "Added to Favourite list " + 
          CenterRepository.getInstance().getAudioCollection().getSongAt(AppConfig.SONG_NUMBER).getTitle() 
        , Toast.LENGTH_SHORT).show(); 

     } 
    } 
Cuestiones relacionadas