Android 检查相册艺术是否存在?

Android 检查相册艺术是否存在?,android,android-glide,mediastore,android-music-player,albumart,Android,Android Glide,Mediastore,Android Music Player,Albumart,我正在构建一个音乐播放器应用程序。我正在尝试用专辑《歌曲艺术》填充一个recyclerView。我用下面给出的代码成功地做到了这一点。但有些歌曲没有嵌入唱片集,文件夹中没有任何唱片集。因此,我试图在将相册艺术添加到recyclerView之前检查它是否为空。如果相册艺术为空,应用程序将自动从internet获取它。我尝试检查相册艺术是否为空,但每次它都会给我一个uri是否有相册艺术可用 从mediastore获取相册艺术的代码: String[] projection = {MediaStor

我正在构建一个音乐播放器应用程序。我正在尝试用专辑《歌曲艺术》填充一个
recyclerView
。我用下面给出的代码成功地做到了这一点。但有些歌曲没有嵌入唱片集,文件夹中没有任何唱片集。因此,我试图在将相册艺术添加到
recyclerView
之前检查它是否为空。如果相册艺术为空,应用程序将自动从internet获取它。我尝试检查相册艺术是否为空,但每次它都会给我一个
uri
是否有相册艺术可用

从mediastore获取相册艺术的代码:

 String[] projection = {MediaStore.Audio.Media._ID,
            MediaStore.Audio.Media.TITLE,
            MediaStore.Audio.Media.ARTIST,
            MediaStore.Audio.Media.ALBUM,
            MediaStore.Audio.Media.DURATION,
            MediaStore.Audio.Media.DATA,
            MediaStore.Audio.Media.ALBUM_ID};
    Cursor cursor = getActivity().getContentResolver().query(uri, projection, selection, whereVal, null);
    if (cursor != null) {
        if (cursor.moveToFirst()) {
            do {
                long id = cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media._ID));
                String name = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.TITLE));
                String artist = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST));
                String album = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM));
                Long duration = cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.DURATION));
                String data = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA));
                Long albumId = cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID));

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


 SongInfoModel s = new SongInfoModel(id, name, artist, null, album, null, duration, data, albumId,albumArtUri);
                SongList.add(s);



            } while (cursor.moveToNext());
        }
albumArtUri的值从不为null

它始终提供以下uri:

但在这些uri中,
content://media/external/audio/albumart/9
没有相册艺术。它总是显示我使用
Glide

所以我的问题是,在填充
recyclerView
之前,如何检查专辑艺术是否可用(作为嵌入式艺术或歌曲文件夹)?我知道我可以使用
Glide
占位符,我正在使用它。但是如果相册艺术在脱机状态下不可用,我还想从internet获取相册艺术,这就是我需要检查的原因,这样我就可以将internet链接添加到arraylist中。希望你们明白我想说的

谢谢大家!

编辑

我发现下面给出的代码片段返回是否存在album art,但它会占用大量时间

  public String fetchAlbumArt(long albumID){

    String art;
    Cursor cur = getActivity().getContentResolver().query(MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI, new String[]
            {MediaStore.Audio.Albums.ALBUM_ART}, MediaStore.Audio.Albums._ID + "=?", new String[] {String.valueOf(albumID)}, null);

    cur.moveToFirst();
    art = cur.getString(cur.getColumnIndex(MediaStore.Audio.Albums.ALBUM_ART));

    cur.close();

    return art;
}
最简单的方法:

                //  loading album cover using Glide library
            String stralbumId = c.getString(c
                    .getColumnIndex(BaseColumns._ID));

            Uri ImageUrl = getAlbumUri(mContext, stralbumId);
            if (ImageUrl != null) {
                Glide.with(mContext)
                        .asBitmap()
                        .load(ImageUrl)
                        .into(image);
            }


}

您可以使用
MediaMetadataRetriever
请尝试下面的代码,并阅读
MediaMetadataRetriever


您希望读取实际文件并进行检查。你看过吗。否则,请使用第三方库(如audiotagger或jid3)阅读mp3tags@Rektirino如果您承认这是否有用,那就太好了
                //  loading album cover using Glide library
            String stralbumId = c.getString(c
                    .getColumnIndex(BaseColumns._ID));

            Uri ImageUrl = getAlbumUri(mContext, stralbumId);
            if (ImageUrl != null) {
                Glide.with(mContext)
                        .asBitmap()
                        .load(ImageUrl)
                        .into(image);
            }
  public Uri getAlbumUri(Context mContext,String album_id){
if(mContext!=null) {
    Uri sArtworkUri = Uri.parse("content://media/external/audio/albumart");
    Uri imageUri = Uri.withAppendedPath(sArtworkUri, String.valueOf(album_id));
    return imageUri;
}
return null;
MediaMetadataRetriever retriver = new MediaMetadataRetriever();
retriver.setDataSource(musicFile.getAbsolutePath());
byte[] cover = retriver.getEmbeddedPicture();
if(cover == null){
  // get cover from the internet 
}else{
  // use glide to load the album art
}