2010-07-06 3 views
11

Кто-нибудь знает, как добавить плейлисты в Android в коде?Android Создать плейлист

Я как бы понял, что мне нужно вставить его в контент-резольвер, но нужно ли просто вставить идентификатор песни или мне нужно поместить все данные этой песни?

Я искал образец кода, но пока не нашел.

EDIT: Обнаружили ответ здесь, как я это делаю:

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

Я пытаюсь понять code ... В addToPlaylist вы фактически устанавливаете свойство PLAY_ORDER в <количество песен в списке воспроизведения> + <глобальный идентификатор песни>? Означает ли это, что PLAY_ORDER не является индексом дорожки, или что audioId не является уникальным идентификатором песни в устройстве? –

+0

Кроме того, какой должен быть плейлист? Этот код, кажется, только добавляет элементы в плейлисты - есть ли способ на самом деле * создать * плейлист? – Yang

+1

Если вы решили проблему самостоятельно, пожалуйста, перейдите, создайте ответ и отметьте его как принятый. –

ответ

11

Чтобы получить этот вопрос из «не ответил» Я вставил код в OP здесь:

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

Спасибо, я не был уверен, могу ли я ответить на мои вопросы тогда :) – shaneburgess

+0

любая идея, как создать новый плейлист по имени? –

+2

@aloneguid Вы можете попробовать: 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

Для ответ Jaroslav Záruba, код лучше с PLAY_ORDER добавленного набора треков следующим образом:

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

Изменились две основные вещи: мы используем последний элемент плейлиста (cur.moveToLast()) и добавляем 1 к его значению PLAY_ORDER для определения PLAY_ORDER нового трека. Дело в том, что в списке воспроизведения есть последовательные треки.

Вы также можете добавить 10, например, чтобы вы могли вставлять дорожки до или после нового трека. Я также изменил способ получения идентификатора трека. В самом деле, мы не хотим, чтобы возникали проблемы с получением неверных данных, поэтому мы указываем нужный столбец.

+2

как получить YOUR_PLAYLIST_ID –

0

Это исправляется код, который удалить песню из списка воспроизведения:

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

Используйте это сам код является сам объяснительный. Это добавит песню с данной id = songID в плейлист с названием playlistName

Если список воспроизведения уже существует, то он будет добавлен к существующему или он будет создавать новые, а затем добавить песню к нему

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

     } 
    } 
Смежные вопросы