2010-07-06 106 views
11

任何人都知道如何将代码中的播放列表添加到Android?Android创建播放列表

我得到的是我不得不将它插入到内容解析器中,但是我必须将歌曲ID插入还是必须将所有歌曲的数据放入?

我一直在寻找示例代码,但还没有找到。

编辑: 发现这里的答案是我如何做到这一点:

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

我想了解代码...在addToPlaylist中,你是否将PLAY_ORDER属性设置为<播放列表中的歌曲数量> + <歌曲的全局ID>?这是否意味着PLAY_ORDER不是音轨索引,或者audioId不是设备中歌曲的唯一标识符? – 2010-11-07 17:46:40

+0

另外,playlistId应该是什么?此代码似乎只将项目添加到播放列表 - 有没有一种方法可以实际创建播放列表? – Yang 2011-06-27 01:58:20

+1

如果您自己解决了问题,请移动创建答案并将其标记为已接受。 – 2011-07-10 19:19:06

回答

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 2011-07-15 23:21:07

+0

任何想法如何通过名称创建新的播放列表? – 2011-10-11 22:58:28

+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); } – 2012-02-15 20:07:08

2

要回答JaroslavZá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()),并且我们给它的PLAY_ORDER值加1以确定新音乐的PLAY_ORDER。重点是在播放列表中有连续的曲目。

您还可以添加10个例子,以便您可以在新曲目之前或之后插入曲目。 我也改变了我们获得曲目ID的方式。事实上,我们不想有任何问题获取错误的数据,所以我们指定我们想要的列。

+2

如何提取YOUR_PLAYLIST_ID – 2014-06-05 10:01:34

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

     } 
    }