首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android Media.Audio.Playlists总是不返回播放列表。

Android Media.Audio.Playlists总是不返回播放列表。
EN

Stack Overflow用户
提问于 2016-10-17 16:09:24
回答 1查看 312关注 0票数 1

我想在Android设备中检索所有歌曲播放列表。我在网上搜索过代码示例,但查询playlistResolver.query(playlists,null,null)总是给出大小为0。打印播放列表名称的do循环永远不会执行。我已经在网上尝试了一些解决方案,但都不起作用。感谢任何人的帮助。谢谢!

代码语言:javascript
复制
 public void getSongList() {
    //retrieve song info
    ContentResolver musicResolver = getContentResolver();
    //retrieve playlists
    ContentResolver playlistResolver = getApplicationContext().getContentResolver();

    Uri playlists = MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI;

    Cursor c = playlistResolver.query(playlists, null, null, null, null);
    long playlistId = 0;
    if(c!=null && c.moveToFirst()) {
        do {
            String plName = c.getString(c.getColumnIndex(MediaStore.Audio.Playlists.NAME));
            playlistId = c.getLong(c.getColumnIndex(MediaStore.Audio.Playlists._ID));
            Log.d("PLAYLIST NAME", "PLAYLIST NAME " + plName);
        } while (c.moveToNext());
    }
    c.close();

    Uri musicUri = android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;

    String isMusic = MediaStore.Audio.Media.IS_MUSIC + "!= 0";//only get music tracks
    Cursor musicCursor = musicResolver.query(musicUri, null, isMusic, null, null);
    if(musicCursor!=null){
        musicCursor.moveToFirst();
        //get columns
        int titleColumn = musicCursor.getColumnIndex
                (android.provider.MediaStore.Audio.Media.TITLE);
        int idColumn = musicCursor.getColumnIndex
                (android.provider.MediaStore.Audio.Media._ID);
        int artistColumn = musicCursor.getColumnIndex
                (android.provider.MediaStore.Audio.Media.ARTIST);
        int durationColumn = musicCursor.getColumnIndex
                (MediaStore.Audio.AudioColumns.DURATION);

        //add songs to list
        do {
            long thisId = musicCursor.getLong(idColumn);
            String thisTitle = musicCursor.getString(titleColumn);
            String thisArtist = musicCursor.getString(artistColumn);
            int thisDuration = musicCursor.getInt(durationColumn);
            //String thisPlaylist = musicCursor.getString(playlistColumn);
            //Log.d("SONG IN PLAYLIST", "SONG " + thisTitle + " IN PLAYLIST " + thisPlaylist);
            songList.add(new Song(thisId, thisTitle, thisArtist, thisDuration));
        }
        while (musicCursor.moveToNext());
    }
}
EN

回答 1

Stack Overflow用户

发布于 2017-10-16 15:17:00

今天我碰巧遇到了同样的问题。播放列表的全局存储通常是Phone\Internal storage\ playlists 。问题中引用的代码只能从全局存储中检索播放列表。如果一个音乐应用在它的本地存储中创建了播放列表,那么你就不能访问这些播放列表。

我安装了两个不同的音乐应用程序X和Y。

  • 都可以创建播放列表,但没有一个播放列表会进入默认存储位置,每个应用程序都会显示自己创建的播放列表。所有应用都没有显示其他应用创建的播放列表。

然后我安装了第三个app Z,它在全局存储中创建了播放列表,我可以使用问题中的代码来检索它。第一批应用程序之一能够显示Z创建的播放列表,但它继续只在本地存储中创建新的播放列表。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40081377

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档