How to Display Album Art Using Mediastore.Audio.Albums.Album_Art

How can I display Album Art using MediaStore.Audio.Albums.ALBUM_ART?

Here's how I get album art for a song:

Cursor cursor = getContentResolver().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(albumId)},
null);

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

albumId refers to MediaStore.Audio.Media.ALBUM_ID for that song.

If you're are looking for album art for a particular song (rather than in a list of albums), as far as I know it's a two-stage process since ALBUM_ART is a property of MediaStore.Audio.Albums and is not available directly as song metadata.

Display album art from MediaStore.Audio.Albums.ALBUM_ART

I've achieved to load the Albums Covers in the ImageViews with :

    String coverPath = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Albums.ALBUM_ART));
Drawable img = Drawable.createFromPath(coverPath);
ImageView coverAlbum=(ImageView)view.findViewById(R.id.album_cover);
coverAlbum.setImageDrawable(img);

The problem is that the list is very slow. I guess that I should scale down the resolution of the cover to consume less memory.

How can i get the album art from MediaStore?

Does it iterate over the amount of entries you see in the directory or do the numbers not match up?

The following works for me when searching for images in teh MediaStore

if (cursor.moveToFirst()) {
do {
int col = cursor.getColumnIndex(Images.Media.DESCRIPTION);
String description = cursor.getString(col);
if (new Long(item).toString().equals(description)) {
imageId = cursor.getPosition();
int dataColumn = cursor.getColumnIndex(Images.Media.DATA);
filePath = cursor.getString(dataColumn);
return true;
}
} while (cursor.moveToNext());

load cover audio art in android

Solved:

  • Load audio file:
 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.ARTIST + " DESC";
Cursor cursor = contentResolver.query(uri, null, selection, null, sortOrder);

if (cursor != null && cursor.getCount() > 0) {
audioList.clear();
while (cursor.moveToNext()) {
Audio audio = new Audio();
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));
Bitmap thumbnail = null;
String albumArt = null;
Uri imageUri_t;

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);

while (cursor1.moveToNext()) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
Size thumbSize = new Size(100, 100);
try {
int thumbColumn = cursor1.getColumnIndexOrThrow(MediaStore.Audio.Albums._ID);
int _thumpId = cursor1.getInt(thumbColumn);
imageUri_t = ContentUris.withAppendedId(MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI, _thumpId);
thumbnail = getContentResolver().loadThumbnail(imageUri_t, thumbSize, null);

} catch (IOException e) {
e.printStackTrace();
}

} else {
albumArt = cursor1.getString(cursor1.getColumnIndex(MediaStore.Audio.Albums.ALBUM_ART));
}
}


audio.setData(data);
audio.setTitle(title);
audio.setAlbum(album);
audio.setArtist(artist);
audio.setAlbumId(albumId);
audio.setAlbumArt(albumArt);
audio.setThumbnail(thumbnail);
audioList.add(audio);
}
}
cursor.close();

setAdapter();
}
  • And a part of MyAdapter:
@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);
}
}
}
}

First query on MediaStore.Audio.Media.ARTIST about fetch audio info from MediaStore.

There is a difference About fetch thumbnail of Audio file in android 10 (Q) and below.
So query for lower than Android 10 is like follow:

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

You can get album art from ALBUM_ART column in MediaStore.Audio.Albums.

Then for Android 10 like follow this:

Query on MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI where albumId equals _ID column from MediaStore.Audio.Albums.
And load thumbnail from Content Resolver by image uri...

I hope it is useful ;)

Get Album Art With Album Name Android

use Below Code to get album art with song information. you can change slightly to display only album names instead of songs list.

 public class BrowseAudioActivity extends Activity implements
AppConstants {
private Context context;
private ArrayList<AudioListModel> audioArrayList = new ArrayList<AudioListModel>();
private AudioListAdapter audioListAdapter;
private ListView audioListView;



/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
setContentView(R.layout.audio_list);
UtilityClass.addActivityToStack(this);
context = this;
audioListView = (ListView) findViewById(R.id.list_audio);

new GetAudioListAsynkTask(context).execute((Void) null);



}

private void initLayout() {
final Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
final String[] cursor_cols = { MediaStore.Audio.Media._ID,
MediaStore.Audio.Media.ARTIST, MediaStore.Audio.Media.ALBUM,
MediaStore.Audio.Media.TITLE, MediaStore.Audio.Media.DATA,
MediaStore.Audio.Media.ALBUM_ID,
MediaStore.Audio.Media.DURATION };
final String where = MediaStore.Audio.Media.IS_MUSIC + "=1";
final Cursor cursor = context.getContentResolver().query(uri,
cursor_cols, where, null, null);

while (cursor.moveToNext()) {
String artist = cursor.getString(cursor
.getColumnIndexOrThrow(MediaStore.Audio.Media.ARTIST));
String album = cursor.getString(cursor
.getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM));
String track = cursor.getString(cursor
.getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE));
String data = cursor.getString(cursor
.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA));
Long albumId = cursor.getLong(cursor
.getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM_ID));

int duration = cursor.getInt(cursor
.getColumnIndexOrThrow(MediaStore.Audio.Media.DURATION));

Uri sArtworkUri = Uri
.parse("content://media/external/audio/albumart");
Uri albumArtUri = ContentUris.withAppendedId(sArtworkUri, albumId);

Logger.debug(albumArtUri.toString());
Bitmap bitmap = null;
try {
bitmap = MediaStore.Images.Media.getBitmap(
context.getContentResolver(), albumArtUri);
bitmap = Bitmap.createScaledBitmap(bitmap, 30, 30, true);

} catch (FileNotFoundException exception) {
exception.printStackTrace();
bitmap = BitmapFactory.decodeResource(context.getResources(),
R.drawable.audio_file);
} catch (IOException e) {

e.printStackTrace();
}

AudioListModel audioListModel = new AudioListModel();
audioListModel.setArtist(artist);
audioListModel.setBitmap(bitmap);
audioListModel.setAlbum(album);
audioListModel.setTrack(track);
audioListModel.setData(data);
audioListModel.setAlbumId(albumId);
audioListModel.setDuration(duration);
audioListModel.setAlbumArtUri(albumArtUri);

audioArrayList.add(audioListModel);

}

}

public String getRealPathFromURI(Uri contentUri) {
String[] proj = { MediaStore.Images.Media.DATA };
Cursor cursor = context.getContentResolver().query(contentUri, proj,
null, null, null);
int column_index = cursor
.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}

private class GetAudioListAsynkTask extends AsyncTask<Void, Void, Boolean> {

private Context context;
private CustomProgressDialog progressDialog;

public GetAudioListAsynkTask(Context context) {

this.context = context;
}

@Override
protected void onPreExecute() {
progressDialog = new CustomProgressDialog(context,
AUDIO_LOADING_HEADING, AUDIO_LOADING_MSG);
progressDialog.setCancelable(false);
progressDialog.show();
super.onPreExecute();

}

@Override
protected Boolean doInBackground(Void... params) {
try {
initLayout();

return true;
} catch (Exception e) {
return false;

}

}

@Override
protected void onPostExecute(Boolean result) {
progressDialog.dismiss();

audioListAdapter = new AudioListAdapter(context, audioArrayList);
audioListView.setAdapter(audioListAdapter);
audioListView
.setOnItemClickListener(new AudioListItemClickListener(
context, audioArrayList));

}
}

@Override
protected void onPause() {
super.onPause();
overridePendingTransition(0, 0);
}

@Override
protected void onDestroy() {
super.onDestroy();
UtilityClass.removeActivityOnFinish(this);
}

@Override
public void onBackPressed() {
super.onBackPressed();
finish();
}

}


Related Topics



Leave a reply



Submit