Я создаю приложение для музыкального плеера.Я пытаюсь заполнить recyclerView
обложками альбомов песен.Я успешно сделал это с кодом, который приведен ниже.Но некоторые из песен не имеют встроенных обложек альбомов и обложек альбомов в папке.Итак, я пытаюсь проверить, является ли обложка альбома нулевой или нет, прежде чем добавить его в recyclerView
.Если обложка альбома пуста, приложение автоматически загрузит ее из Интернета.Я пытался проверить, является ли обложка альбома нулевой или нет, но каждый раз он дает мне 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
заполнитель, и я использую его.Но я также хочу получить обложки альбомов из Интернета, если обложки альбомов недоступны в автономном режиме, поэтому мне нужно проверить, чтобы я мог добавить интернет-ссылки в массив.Надеюсь, вы, ребята, поняли, что я пытаюсь сказать.
Спасибо!
РЕДАКТИРОВАТЬ :
Я обнаружил, что приведенный ниже фрагмент кода возвращается, если обложка альбома существует или нет, но она потребляет многовремя.
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;
}