Невозможно получить обложку альбома и название альбома вместе - PullRequest
0 голосов
/ 22 сентября 2018

Я пытаюсь показать обложку альбома с именами альбомов.

Если я использую MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, тогда названия альбомов повторяются;но я могу показать обложку альбома.

И если я использую MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI, тогда названия альбомов не повторяются, но обложка альбома не отображается.

Как я могу получить неповторимые названия альбомов с обложкой альбома (если есть)?

Снимок экрана

Примечание. Я создал список песен, в котором были выбраны имя песни, имя исполнителя, продолжительность песни и обложки альбомов.Но я не могу получить название альбома и обложку альбома (либо обложку альбома, либо название альбома) с той же методологией на вкладке Альбомы (у меня есть четыре вкладки для Песни, Исполнители, Альбомы и Списки воспроизведения).

Спасибоза вашу помощь.

Вот код:

Albums.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();
  }
}
...