Java 加载android中的覆盖音频艺术

Java 加载android中的覆盖音频艺术,java,android,Java,Android,我想加载android中的cover audio art以显示设备中的音频列表。为此,我使用了以下链接: 如下图所示: 和我的加载音频文件的代码: private void loadAudio() { ContentResolver contentResolver = getContentResolver(); Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; Stri

我想加载android中的cover audio art以显示设备中的音频列表。为此,我使用了以下链接:

如下图所示:

和我的加载音频文件的代码


  private void loadAudio() {
        ContentResolver contentResolver = getContentResolver();

        Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
        String selection = MediaStore.Audio.Media.IS_MUSIC + "!= 0";
        String sortOrder = MediaStore.Audio.Media.TITLE + " ASC";
        Cursor cursor = contentResolver.query(uri, null, selection, null, sortOrder);
        
        if (cursor != null && cursor.getCount() > 0) {
            audioList.clear();
            while (cursor.moveToNext()) {
                String data = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA));
                String title = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.TITLE));
                String album = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM));
                String artist = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST));
                int albumId = cursor.getInt(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID));

                Cursor cursor1 = contentResolver.query(MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI,
                        new String[]{MediaStore.Audio.Albums._ID, MediaStore.Audio.Albums.ALBUM_ART},
                        MediaStore.Audio.Albums._ID + "=" + albumId, null, null);

                Bitmap bitmap = null;
                if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q) {
                    try {
                        bitmap = contentResolver.loadThumbnail(MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI, new Size(30, 30), null);

                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                String albumArt = "";
                if (cursor1 != null && cursor1.getCount() > 0)
                    while (cursor1.moveToNext()) {
                        albumArt = cursor.getString(cursor1.getColumnIndex(MediaStore.Audio.Albums.ALBUM_ART));
                    }

                // Save to audioList
                audioList.add(new Audio(data, title, album, artist, albumArt, bitmap));
            }
        }
        cursor.close();

        setAdapter();
    }

在MyAdapter中,关于recyclerview:

 @Override
    public void onBindViewHolder(@NonNull MainHolder holder, int position) {
        Audio audio = arrayList.get(position);
        holder.txtTitle.setText("Title: " + audio.getTitle());
        holder.txtAlbum.setText("Album: " + audio.getAlbum());
        holder.txtArtist.setText("Artist: " + audio.getArtist());
        File imgFile = new File(audio.getAlbumArt());
        Picasso.get().load(imgFile.getAbsolutePath()).into(holder.img);
        if (imgFile.exists()) {
            Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
            holder.img.setImageBitmap(myBitmap);
        }
    }


请帮帮我。

已解决:

  • 加载音频文件:
  • 以及MyAdapter的一部分:
第一次查询关于从MediaStore获取音频信息的MediaStore.Audio.Media.Artister

在android 10(Q)和更低版本中,获取音频文件缩略图的方式有所不同。 因此,低于Android 10的查询如下所示:

String albumArt = cursor1.getString(cursor1.getColumnIndex(MediaStore.Audio.Albums.ALBUM_ART));
您可以从MediaStore.Audio.Albums中的“相册艺术”列中获取相册艺术

然后对于Android 10,如以下所示:

查询MediaStore.Audio.Albums.EXTERNAL\u CONTENT\u URI其中albumId等于MediaStore.Audio.Albums中的\u ID列。 并通过图像uri从内容解析器加载缩略图


我希望它有用;)

什么是‘不起作用’?:发生了什么?您遇到了哪种异常?已解决,但我想从音频文件中获取图像。我是怎么做到的?你的代码中没有任何东西试图获取图像,那么你怎么能说你的代码不工作?被编辑了吗?我的问题@blackapps
为什么会这样?
????你这是什么意思?现在还不清楚你有什么问题。看看我的第一条评论。你应该多说。
@Override
    public void onBindViewHolder(@NonNull MainHolder holder, int position) {
        Audio audio = arrayList.get(position);
        holder.txtTitle.setText("Title: " + audio.getTitle());
        holder.txtAlbum.setText("Album: " + audio.getAlbum());
        holder.txtArtist.setText("Artist: " + audio.getArtist());

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
            if (audio.getThumbnail() != null)
            holder.img.setImageBitmap(audio.getThumbnail());
        } else {
            if (audio.getAlbumArt() != null) {
                File imgFile = new File(audio.getAlbumArt());
                if (imgFile.exists()) {
                    Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
                    holder.img.setImageBitmap(myBitmap);
                }
            }
        }
    }

String albumArt = cursor1.getString(cursor1.getColumnIndex(MediaStore.Audio.Albums.ALBUM_ART));