给定一个Android音乐播放列表名称,如何find播放列表中的歌曲?

播放列表名称可以通过MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI上的查询find,然后查看MediaStore.Audio.PlaylistsColumns.NAME列。 还有一个数据列,MediaStore.Audio.PlaylistsColumns._DATA,但是它返回null。

歌曲列表( MediaStore.Audio.Media.EXTERNAL_CONTENT_URI/id )似乎没有显示任何播放列表从属关系。

Solutions Collecting From Web of "给定一个Android音乐播放列表名称,如何find播放列表中的歌曲?"

这里有一点我的程序:

要点是你需要播放列表的id来获取歌曲。

基本上,你可以把我的代码和where语句改成.NAME +“='”+ name +“'”,

 private Cursor getPlaylists(String playlistId){ Cursor cursor = null; String[] projection1 = { MediaStore.Audio.Playlists._ID, MediaStore.Audio.Playlists.NAME }; cursor = this.managedQuery( MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI, projection1, MediaStore.Audio.Playlists._ID+ " = "+playlistId+"", null, null); startManagingCursor(cursor); cursor.moveToFirst(); playlist_id = cursor.getString(0); playlist_id2 = cursor.getLong(0); if(playlist_id2 > 0){ String[] projection = { MediaStore.Audio.Playlists.Members.AUDIO_ID, MediaStore.Audio.Playlists.Members.ARTIST, MediaStore.Audio.Playlists.Members.TITLE, MediaStore.Audio.Playlists.Members._ID }; cursor = null; cursor = this.managedQuery( MediaStore.Audio.Playlists.Members.getContentUri("external",playlist_id2 ), projection, MediaStore.Audio.Media.IS_MUSIC +" != 0 ", null, null); } cManager(cursor,2,1); return cursor; } 

这是从设备获取所有播放列表的方式

 public ArrayList<String> getPlayList() { ArrayList<String> arrayList=new ArrayList<String>(); String[] proj = {"*"}; Uri tempPlaylistURI = MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI; // In the next line 'this' points to current Activity. // If you want to use the same code in other java file then activity, // then use an instance of any activity in place of 'this'. Cursor playListCursor= activity.managedQuery(tempPlaylistURI, proj, null,null,null); if(playListCursor == null){ System.out.println("Not having any Playlist on phone --------------"); return arrayList;//don't have list on phone } System.gc(); String playListName = null; System.out.println(">>>>>>> CREATING AND DISPLAYING LIST OF ALL CREATED PLAYLIST <<<<<<"); for(int i = 0; i <playListCursor.getCount() ; i++) { playListCursor.moveToPosition(i); playListName = playListCursor.getString(playListCursor.getColumnIndex("name")); System.out.println("> " + i + " : " + playListName ); arrayList.add(playListName); } if(playListCursor != null) playListCursor.close(); return arrayList; } 

这是从播放列表中获取曲目的一种工作方式。 基本上,它循环遍历所有的播放列表查询,每次获得一个成员(轨道)的ID和使用该轨道的ID我们可以得到其他数据,如path,艺术家,持续时间,专辑等。

  ContentResolver contentResolver = getContentResolver(); Uri playListUri = MediaStore.Audio.Playlists.Members.getContentUri("external", playlistID); //playlistID is the _ID of the given playlist MediaMetadataRetriever mr = new MediaMetadataRetriever(); Cursor cursor = contentResolver.query(playListUri, null, null, null, null); if(cursor != null) { if(cursor.moveToNext()) { do { String track_id = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Playlists.Members.AUDIO_ID)); Uri mediaContentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; String[] trackProjection = new String[]{MediaStore.Audio.Media.TITLE, MediaStore.Audio.Media.ARTIST, MediaStore.Audio.Media.ALBUM, MediaStore.Audio.Media.DATA}; String selection = MediaStore.Audio.Media._ID + "=?"; String[] selectionArgs = new String[]{"" + track_id}; Cursor mediaCursor = contentResolver.query(mediaContentUri, trackProjection, selection, selectionArgs, null); if (mediaCursor != null) { if (mediaCursor.getCount() >= 0) { mediaCursor.moveToPosition(0); String song_title = mediaCursor.getString(mediaCursor.getColumnIndex(MediaStore.Audio.Media.TITLE)); String song_artist = mediaCursor.getString(mediaCursor.getColumnIndex(MediaStore.Audio.Media.ALBUM)); String song_album = mediaCursor.getString(mediaCursor.getColumnIndex(MediaStore.Audio.Media.ARTIST)); String song_path = mediaCursor.getString(mediaCursor.getColumnIndex(MediaStore.Audio.Media.DATA)); } } } while (cursor.moveToNext()); } }