首页 > 解决方案 > 无法同时获取专辑封面和专辑名称

问题描述

我正在尝试用专辑名称显示专辑封面。

如果我使用MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,则重复专辑名称;但我可以展示专辑封面。

如果我使用MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI,则不会重复专辑名称,但不会显示专辑封面。

如何使用专辑封面(如果有)获得不重复的专辑名称?

截屏

注意:我之前创建了一个歌曲列表,其中获取了歌曲名称、艺术家姓名、歌曲持续时间和专辑封面。但是我无法在“专辑”选项卡中使用相同的方法获取专辑名称和专辑封面(获取专辑封面或专辑名称)(我有四个选项卡用于歌曲、艺术家、专辑和播放列表)。

谢谢您的帮助。

这是代码:

相册.java

List<Album> sampleAlbum = new ArrayList<>();    
public void getAlbum() {
    ContentResolver contentResolver = getActivity().getContentResolver();
    Uri songUri = MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI;
    Cursor songCursor = contentResolver.query(songUri, null, null, null, null);

    if (songCursor != null && songCursor.moveToFirst()) {
        int songAlbum = songCursor.getColumnIndex(MediaStore.Audio.Albums.ALBUM);
        int songPath = songCursor.getColumnIndex(MediaStore.Audio.Albums.ALBUM_ART);
        do {
            Album newAlbum = new Album();
            newAlbum.albumName = songCursor.getString(songAlbum);
            newAlbum.pathName = songCursor.getString(songPath);
            sampleAlbum.add(newAlbum);
        }

        while (songCursor.moveToNext());
    }
}

AlbumRecyclerAdapter.java

public class AlbumRecyclerAdapter extends RecyclerView.Adapter<AlbumViewHolder> {

private List<Album> albums;
private Context context;

public AlbumRecyclerAdapter(Context context, List<Album> albums) {
    this.albums = albums;
    this.context = context;
}

@Override
public AlbumViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.album_recycler_item, parent, false);
    return new AlbumViewHolder(view);
}

@Override
public void onBindViewHolder(AlbumViewHolder holder, final int position) {

    final Album sampleAlbum = albums.get(position);
    holder.album_name.setText(sampleAlbum.albumName);

    try {
        MediaMetadataRetriever mmr = new MediaMetadataRetriever();
        mmr.setDataSource(albums.get(position).pathName);

        byte[] data = mmr.getEmbeddedPicture();

        if (data != null) {
            Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
            holder.album_image.setImageBitmap(bitmap);
            holder.album_image.setAdjustViewBounds(true);
            holder.album_image.setLayoutParams(new LinearLayout.LayoutParams(500, 500));
        }
        else {
            holder.album_image.setImageResource(R.drawable.default);
            holder.album_image.setAdjustViewBounds(true);
            holder.album_image.setLayoutParams(new LinearLayout.LayoutParams(500, 500));
        }
    }
    catch (Exception e) {
        e.printStackTrace();
    }

    holder.constraintLayout.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(context, "Album " + sampleAlbum.albumName + "'s songs will be opened", Toast.LENGTH_LONG).show();
        }
    });

}

@Override
public int getItemCount() {
    return albums.size();
  }
}

标签: androidandroid-mediaplayerandroid-contentresolvermediastorealbumart

解决方案


推荐阅读