【问题标题】:Android Create PlaylistAndroid 创建播放列表
【发布时间】:2010-07-06 01:05:16
【问题描述】:

有人知道如何在代码中向 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);
    }

【问题讨论】:

  • 我正在尝试理解代码...在 addToPlaylist 中,您实际上是否将 PLAY_ORDER 属性设置为 + ?这是否意味着 PLAY_ORDER 不是曲目索引,或者 audioId 不是设备中歌曲的唯一标识符?
  • 另外,playlistId 应该是什么?此代码似乎只将项目添加到播放列表 - 有没有办法真正创建播放列表?
  • 如果您自己解决了问题,请移动创建答案并将其标记为已接受。
  • 您应该将您的答案作为答案重新发布。否则您的问题会显示在未回答中。
  • 如何获取 YOUR_PLAYLIST_ID

标签: android android-contentresolver


【解决方案1】:

为了解决“未回答”的问题,我在此处粘贴了 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);
    }

【讨论】:

  • 谢谢,当时我不确定我是否可以回答自己的问题 :)
  • 知道如何按名称创建新的播放列表吗?
  • @aloneguid 你可以试试: public static void createPlaylist(ContentResolver resolver, String pName) { Uri uri = MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI; ContentValues 值 = 新 ContentValues(); values.put(MediaStore.Audio.Playlists.NAME, pName); Uri newPlaylistUri = resolver.insert(uri, values); Console.debug(TAG, "newPlaylistUri:" + newPlaylistUri, Console.Liviu); }
  • 现在获取 YOUR_PLAYLIST_ID
【解决方案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()) 并将其 PLAY_ORDER 值加 1 来确定新曲目的 PLAY_ORDER。关键是在播放列表中有连续的曲目。

例如,您还可以添加 10 个,这样您就可以在新曲目之前或之后插入曲目。 我还改变了我们获取track id的方式。事实上,我们不希望在获取错误数据时遇到任何问题,因此我们指定了我们想要的列。

【讨论】:

  • 如何获取 YOUR_PLAYLIST_ID
【解决方案3】:

这是从播放列表中删除歌曲的更正代码:

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

【讨论】:

    【解决方案4】:

    使用这个代码本身是不言自明的。它将给定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();
    
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-15
      • 2012-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-04
      • 2018-02-28
      相关资源
      最近更新 更多