如何在android中为音乐播放器创建缩略图播放列表?

如何在android中为音乐播放器创建缩略图播放列表?,android,imageview,thumbnails,grid-layout,audio-player,android-music-player,Android,Imageview,Thumbnails,Grid Layout,Audio Player,Android Music Player,我在android上开发了一个简单的媒体播放器应用程序。它有一个列表视图来加载SD卡中的所有歌曲,搜索栏和播放按钮。我需要为我的应用程序创建一个相册艺术库(如谷歌音乐播放应用程序)。我用这个代码从SD卡上获取所有歌曲 public ArrayList<String> GetFiles(String DirectoryPath) { ArrayList<String> MyFiles = new ArrayList<String>();

我在android上开发了一个简单的媒体播放器应用程序。它有一个列表视图来加载SD卡中的所有歌曲,搜索栏和播放按钮。我需要为我的应用程序创建一个相册艺术库(如谷歌音乐播放应用程序)。我用这个代码从SD卡上获取所有歌曲

public ArrayList<String> GetFiles(String DirectoryPath) {
        ArrayList<String> MyFiles = new ArrayList<String>();
        File f = new File(DirectoryPath);
        f.mkdirs();
        File[] files = f.listFiles();
        if (files.length == 0) {
            return null;
        }else {
            for (int i=0; i<files.length; i++)
                MyFiles.add(files[i].getName());
        }

        return MyFiles;
    }

您需要使用内容解析器



您需要使用内容解析器



非常感谢。如果你想看到所有的项目,我会试试看:你可能使用的部分:它使用dagger 2,但是你应该能够根据你的需要更新它谢谢。我会试着相信你。如果你想看到所有的项目,我会试试看:你可能使用的部分:它使用dagger 2,但是你应该能够根据你的需要更新它谢谢。我试试看
 _________
|         |
| image   |
|         |
|_________|
|  title  |
|_________|
 Uri uri = android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
            // Perform a query on the content resolver. The URI we're passing specifies that we
            // want to query for all audio media on external storage (e.g. SD card)
            Cursor cur = contentResolver.query(uri, null,
                    MediaStore.Audio.Media.IS_MUSIC + " = 1", null, null);
            if (cur == null) {
                Log.e(TAG, "Failed to retrieve music: cursor is null :-(");
                subscriber.onError(new Throwable("Failed to retrieve music: cursor is null :-("));
                return;
            }
            if (!cur.moveToFirst()) {
                subscriber.onError(new Throwable("No results. :( Add some tracks!"));

                Log.e(TAG, "Failed to move cursor to first row (no query results).");
                return;
            }
            int artistColumn = cur.getColumnIndex(MediaStore.Audio.Media.ARTIST);
            int titleColumn = cur.getColumnIndex(MediaStore.Audio.Media.TITLE);
            int albumColumn = cur.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID);
            int durationColumn = cur.getColumnIndex(MediaStore.Audio.Media.DURATION);
            int idColumn = cur.getColumnIndex(MediaStore.Audio.Media._ID);
            int dataColumn = cur.getColumnIndex(MediaStore.Audio.Media.DATA);
            ArrayList<LocalTrack> tracks = new ArrayList<>();

            do {
                Log.i(TAG, "ID: " + cur.getString(idColumn) + " Title: " + cur.getString(titleColumn));
                tracks.add(new LocalTrack(
                        cur.getLong(idColumn),
                        cur.getString(artistColumn),
                        cur.getString(titleColumn),
                        cur.getLong(albumColumn),
                        cur.getLong(durationColumn),
                        cur.getString(dataColumn)));
            } while (cur.moveToNext());
            Log.i(TAG, "Done querying media. MusicRetriever is ready.");
            cur.close();


            for (LocalTrack localTrack : tracks) {
                localTrack.setArtPath(findAlbumArt(localTrack));
            }
            subscriber.onNext(tracks);
public String findAlbumArt(LocalTrack localTrack) {
    Cursor cursor = contentResolver.query(MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI,
            new String[]{MediaStore.Audio.Albums._ID, MediaStore.Audio.Albums.ALBUM_ART},
            MediaStore.Audio.Albums._ID + "=?",
            new String[]{String.valueOf(localTrack.getAlbum())},
            null);

    String path = null;
    if (cursor != null) {
        if (cursor.moveToFirst()) {
            path = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Albums.ALBUM_ART));
            // do whatever you need to do
            cursor.close();
        }
    }

    return path;
}