2010-07-06 11 views
11

Qualcuno sa come aggiungere playlist ad Android nel codice?Android Crea playlist

Mi piacerebbe avere che devo inserirlo nel risolutore di contenuti, ma devo semplicemente inserire l'id del brano o devo inserire tutti i dati del brano?

Ho cercato codice di esempio ma non ne ho ancora trovato.

EDIT: trovato una risposta ecco come lo faccio:

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

Sto cercando di capire il codice ... In addToPlaylist, stai effettivamente impostando la proprietà PLAY_ORDER su + ? Ciò significa che PLAY_ORDER non è un indice di traccia o che ID audio non è un identificatore univoco della canzone nel dispositivo? –

+0

Inoltre, qual è la playlist che dovrei essere? Questo codice sembra aggiungere solo elementi alle playlist: esiste un modo per creare effettivamente * una playlist? – Yang

+1

Se hai risolto il problema da solo, per favore sposta una risposta e contrassegnala come accettata. –

risposta

11

Per ottenere la domanda di "non si risponde" ho incollato il codice del PO qui:

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

Grazie, non ero sicuro di poter rispondere alle mie domande allora :) – shaneburgess

+0

qualche idea su come creare una nuova playlist per nome? –

+2

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

2

Per rispondi al commento di Jaroslav Záruba, il codice è migliore con il PLAY_ORDER del set di tracce aggiunto come segue:

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

Cambiano due cose importanti: utilizziamo l'ultimo elemento della playlist (cur.moveToLast()) e aggiungiamo 1 al suo valore PLAY_ORDER per determinare il nuovo PLAY_ORDER della traccia. Il punto è avere tracce successive nella playlist.

È anche possibile aggiungere 10, ad esempio per poter inserire tracce prima o dopo la nuova traccia. Ho anche cambiato il modo in cui otteniamo l'ID della traccia. In effetti, non vogliamo avere problemi a ottenere dati sbagliati, quindi specifichiamo la colonna che vogliamo.

+2

come recuperare YOUR_PLAYLIST_ID –

0

Questo viene corretto codice che rimuove canzone da brani:

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

Utilizzare questo il codice stesso si spiega da sé. Si aggiungerà canzone con data id = songID a playlist con il nome playlistName

Se playlist già esistenti si aggiunge ad uno esistente o creerà nuovi e quindi aggiungere canzone ad esso

/** 
    * 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(); 

     } 
    }