【问题标题】:Query to display playlist songs returns empty?查询显示播放列表歌曲返回空?
【发布时间】:2016-09-14 18:31:01
【问题描述】:

我试图找出一个MediaStore 查询,它将获取Playlist 的所有成员歌曲。但是,List 总是返回空而没有结果(即使在通知适配器之后)。这是我目前正在做的事情......

获取播放列表歌曲方法

ContentResolver musicResolver = getActivity().getContentResolver();
    Uri musicUri = MediaStore.Audio.Playlists.Members.getContentUri("external", playlistID);
    Cursor musicCursor = musicResolver.query(musicUri, null, null, null, null);

    if(musicCursor!=null && musicCursor.moveToFirst()){
        //get columns
        int idColumn = musicCursor.getColumnIndex
                (MediaStore.Audio.Playlists.Members.AUDIO_ID);
        int titleColumn = musicCursor.getColumnIndex
                (MediaStore.Audio.Playlists.Members.TITLE);
        int artistColumn = musicCursor.getColumnIndex
                (MediaStore.Audio.Playlists.Members.ARTIST);
        int albumColumn = musicCursor.getColumnIndex
                (MediaStore.Audio.Playlists.Members.ALBUM);
        int pathColumn = musicCursor.getColumnIndex
                (MediaStore.Audio.Playlists.Members.DATA);
        //add songs to list
        do {
            long thisId = musicCursor.getLong(idColumn);
            String thisTitle = musicCursor.getString(titleColumn);
            String thisArtist = musicCursor.getString(artistColumn);
            String thisAlbum = musicCursor.getString(albumColumn);
            String thisPath = musicCursor.getString(pathColumn);
            songList.add(new Song(thisId, thisTitle, thisArtist, thisAlbum, thisPath));
        }
        while (musicCursor.moveToNext());
    }
    musicCursor.close();

这就是我如何使用它的 ID 将值添加到播放列表中...

添加播放列表歌曲方法

public static void addToPlaylist(ContentResolver resolver, long audioId, String title, String artist, String album, String path) {

    String[] cols = new String[] {
            "count(*)"
    };
    Uri uri = MediaStore.Audio.Playlists.Members.getContentUri("external", playlistID);
    Cursor cur = resolver.query(uri, cols, null, null, null);
    cur.moveToFirst();
    cur.close();
    ContentValues values = new ContentValues();
    values.put(MediaStore.Audio.Playlists.Members.AUDIO_ID, audioId);
    values.put(MediaStore.Audio.Playlists.Members.TITLE, title);
    values.put(MediaStore.Audio.Playlists.Members.ARTIST, artist);
    values.put(MediaStore.Audio.Playlists.Members.ALBUM, album);
    values.put(MediaStore.Audio.Playlists.Members.DATA, path);
    resolver.insert(uri, values);
}

有什么建议吗?谢谢!

【问题讨论】:

    标签: android listview mediastore


    【解决方案1】:

    抱歉,我在度假时花了一点时间。 要添加到播放列表,您当然只需要 audio_id 和 play_order 和 playlist_id。下面的代码有 cursor 和 where 子句,因为这允许您添加多个轨道,但如果您已经拥有 audio_id,则不需要它

                ContentResolver resolver = context.getContentResolver();
        Uri exturi = MediaStore.Audio.Playlists.Members.getContentUri(
                "external", playlist_id);
        where = MediaStore.Audio.Media._ID + "=?";
        String[] whereVal = {music_id};
    
        Uri mediauri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
        Cursor c = resolver.query(mediauri, projection, where, whereVal,
                null);
    
        if (c != null && c.moveToFirst()) {
            int idColumn = c.getColumnIndex(MediaStore.Audio.Media._ID);
            ContentValues values = new ContentValues();
    
            for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
                String audio_id = c.getString(idColumn);
                values.put(MediaStore.Audio.Playlists.Members.PLAY_ORDER, base);
                values.put(MediaStore.Audio.Playlists.Members.AUDIO_ID, audio_id);
                resolver.insert(exturi, values);
                base++;
            }
            c.close();
        }
    

    要获取播放列表中的所有曲目,我有以下代码:

             public Cursor getPlaylistTracks(Context context, Long playlist_id) {
        Uri newuri = MediaStore.Audio.Playlists.Members.getContentUri(
                "external", playlist_id);
        ContentResolver resolver = context.getContentResolver();
        String _id = MediaStore.Audio.Playlists.Members._ID;
        String audio_id = MediaStore.Audio.Playlists.Members.AUDIO_ID;
        String artist = MediaStore.Audio.Playlists.Members.ARTIST;
        String album = MediaStore.Audio.Playlists.Members.ALBUM;
        String album_id = MediaStore.Audio.Playlists.Members.ALBUM_ID;
        String title = MediaStore.Audio.Playlists.Members.TITLE;
        String duration = MediaStore.Audio.Playlists.Members.DURATION;
        String location = MediaStore.Audio.Playlists.Members.DATA;
        String composer = MediaStore.Audio.Playlists.Members.COMPOSER;
        String playorder = MediaStore.Audio.Playlists.Members.PLAY_ORDER;
    
        String date_modified = MediaStore.Audio.Playlists.Members.DATE_MODIFIED;
        String[] columns = {_id, audio_id, artist, album_id, album, title, duration,
                location, date_modified, playorder, composer};
        return resolver.query(newuri, columns, null, null, null);
    
    }
    

    希望对你有帮助

    【讨论】:

    • 我不明白为什么有人在没有解释的情况下投了反对票
    猜你喜欢
    • 1970-01-01
    • 2012-05-15
    • 2018-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-01
    • 1970-01-01
    相关资源
    最近更新 更多