gpt4 book ai didi

android - 检查专辑封面是否存在?

转载 作者:行者123 更新时间:2023-11-29 01:02:00 24 4
gpt4 key购买 nike

我正在构建一个音乐播放器应用。我正在尝试用歌曲的专辑封面填充 recyclerView。我使用下面给出的代码成功地做到了这一点。但是有些歌曲没有嵌入专辑封面,文件夹中没有任何专辑封面。因此,在将专辑封面添加到 recyclerView 之前,我尝试检查专辑封面是否为 null。如果专辑封面为空,应用程序将自动从互联网上获取它。我尝试检查专辑封面是否为空,但每次它都会给我一个 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 的值永远不会为空。

它总是给出以下 uri:

content://media/external/audio/albumart/12
content://media/external/audio/albumart/5
content://media/external/audio/albumart/6
content://media/external/audio/albumart/3
content://media/external/audio/albumart/8
content://media/external/audio/albumart/9

但在这些 uri 中,content://media/external/audio/albumart/9 没有专辑封面。它总是显示我说的使用 Glide

的占位符

所以我的问题是,如何在填充 recyclerView 之前检查专辑封面是否可用(作为嵌入艺术或在歌曲文件夹中)?我知道我可以使用 Glide 占位符并且我正在使用它。但如果专辑封面离线不可用,我也想从互联网上获取专辑封面,这就是我需要检查的原因,以便我可以将互联网链接添加到数组列表中。希望你们明白我想说的话。

谢谢!

编辑:

我发现下面给出的代码 fragment 会返回是否存在专辑封面,但它会消耗大量时间。

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

  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;

关于android - 检查专辑封面是否存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50423453/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com