#java #android #android-music-player
#java #Android #android-музыкальный проигрыватель
Вопрос:
Я хочу получить обложки музыкальных альбомов, чтобы отображать их в imageview из gridview. и это мой код
void loadAudioData() {
ContentResolver contentResolver = Objects.requireNonNull(getActivity()).getContentResolver();
final Uri uri = MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI;
final String albumId = MediaStore.Audio.Albums._ID;
final String albumName = MediaStore.Audio.Albums.ALBUM;
final String artist = MediaStore.Audio.Albums.ARTIST;
final String albumArt = MediaStore.Audio.AlbumColumns.ALBUM_ART;
final String album_id = MediaStore.Audio.AlbumColumns.ALBUM_ID;
final Uri sArtworkUri = Uri.parse("content://media/external/audio/albumart");
String[] projection = {albumId, albumName, artist, albumArt, album_id};
Cursor cursor = contentResolver.query(uri, projection, null, null, null);
Bitmap bitmap = null;
if (cursor != null amp;amp; cursor.moveToFirst())
while (cursor.moveToNext()) {
long album_idx = cursor.getLong(cursor.getColumnIndexOrThrow(album_id));
Uri albumArtUri = ContentUris.withAppendedId(sArtworkUri, album_idx);
try {
bitmap = MediaStore.Images.Media.getBitmap(getContext().getContentResolver(), albumArtUri);
} catch (IOException e) {
Log.e("bitmap = null", "bitmap = null");
}
if (bitmap == null)
songsList.add(new Songs(R.drawable.album_cover, cursor.getString(cursor.getColumnIndex(albumName)),
cursor.getString(cursor.getColumnIndex(artist))));
else
songsList.add(new Songs(bitmap, cursor.getString(cursor.getColumnIndex(albumName)),
cursor.getString(cursor.getColumnIndex(artist))));
}
cursor.close();
}
проблема в том, что bitmap всегда имеет значение null, а оператор else всегда выполняется, хотя для альбомов есть изображения обложек, и они отображаются в других установленных приложениях.
я перепробовал слишком много решений, но ни одно из них не помогло до конца
Ответ №1:
Попробуйте получить растровое изображение с помощью FileDescriptor. Смотрите обновленный код:
while (cursor.moveToNext()) {
long album_idx = cursor.getLong(cursor.getColumnIndexOrThrow(album_id));
Uri albumArtUri = ContentUris.withAppendedId(sArtworkUri, album_idx);
try {
ParcelFileDescriptor pfd = getContext().getContentResolver().openFileDescriptor(uri, "r");
if (pfd != null) {
FileDescriptor fd = pfd.fileDescriptor;
bitmap = BitmapFactory.decodeFileDescriptor(fd, null,options);
pfd.close();
fd = null;
}
}catch (IOException e) {
Log.e("bitmap = null", "bitmap = null");
}
if (bitmap == null)
songsList.add(new Songs(R.drawable.album_cover, cursor.getString(cursor.getColumnIndex(albumName)),
cursor.getString(cursor.getColumnIndex(artist))));
else
songsList.add(new Songs(bitmap, cursor.getString(cursor.getColumnIndex(albumName)),
cursor.getString(cursor.getColumnIndex(artist))));
}
Комментарии:
1. К сожалению, тот же результат