安卓如何创建播放列表

12

有人知道如何在代码中添加 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不是设备中歌曲的唯一标识符? - Jaroslav Záruba
另外,playlistId 应该是什么?这段代码似乎只能将项目添加到播放列表中 - 是否有一种方法可以实际创建一个播放列表? - Yang
1
如果您自己解决了问题,请创建一个答案并将其标记为已接受。 - Nicklas A.
2
你应该将你的回答重新发布为一个回答。否则,你的问题会显示在未回答中。 - Thomas Dignan
如何获取您的播放列表ID。 - Ankit Srivastava
4个回答

12
为了解决“未回答”的问题,我在这里粘贴了提问者的代码:
 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);
    }

谢谢,当时我不确定是否能够回答自己的问题 :) - shaneburgess
有什么办法可以按名称创建新的播放列表吗? - Ivan G.
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); }
- Ungureanu Liviu
如何获取您的播放列表ID - Ankit Srivastava

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,例如,以便在新曲目之前或之后插入曲目。 我还更改了获取曲目id的方式。确实,我们不希望出现任何获取错误数据的问题,因此我们指定了我们想要的列。


2
如何获取你的播放列表ID - Ankit Srivastava

1
这是已修正的代码,用于从播放列表中删除歌曲:
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();

        }
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接