2009-12-23 3 views
23

Я занимаюсь разработкой своего рода медиаплеера для Android. Вопрос в том, как я могу получить обложку аудиофайла на Android. Например, медиа-плеер по умолчанию для Android показывает обложки альбомов при записи альбомов, как я могу получить это произведение искусства.обложка на андроиде

+0

Поскольку, похоже, есть небольшая путаница в отношении того, в какой части вашего приложения вам нужна помощь, вы можете соответствующим образом обновить свой вопрос. –

+1

вы также можете попробовать следующее: http://stackoverflow.com/questions/10209176/extract-album-cover-from-mp3-file-in-android?rq=1 – Chepech

ответ

43
Uri sArtworkUri = Uri.parse("content://media/external/audio/albumart"); 
Uri uri = ContentUris.withAppendedId(sArtworkUri, album_id); 
ContentResolver res = context.getContentResolver(); 
InputStream in = res.openInputStream(uri); 
Bitmap artwork = BitmapFactory.decodeStream(in); 

Более полный пример кода можно найти в Android источник музыки плеер здесь https://github.com/android/platform_packages_apps_music/blob/master/src/com/android/music/MusicUtils.java метод getArtworkQuick.

+0

Я пробовал код выше, я могу получить обложку альбома, но не в правильном порядке на эмуляторе, на моей Galaxy S я могу увидеть обложку альбома для одного mp3, где у меня более 100 файлов. Еще одно это на моей Galaxy S, показывающее изображение для неправильной песни (только самая верхняя песня). Любое предложение решить эту проблему? –

+1

Это была моя ошибка, вместо id альбома я передавал идентификатор песни. Теперь он работает отлично. спасибо –

+0

эй ... как вы получаете альбом для конкретной песни? –

0

Android только распознает файлы под названием «AlbumArt.jpg» в качестве обложек альбомов. Просто поместите фотографии с этим именем в папку альбома, и все будет в порядке.

+1

Извините, может быть, вопрос был немного запутанным. Я разрабатываю приложение, и я хочу получить обложку альбома из своего приложения. –

0

Я не знаю, читаете ли вы, что Google делает Stackoverflow official Android app development Q&A medium, но для начинающих вопросов ... Теперь я ничего не знаю о разработке в Andriod, но быстрый поиск на сайте Android Developers, я нашел это:

MediaStore.Audio.AlbumColumns

Надеюсь, это поможет.

+1

Да, я также заметил, что есть MediaStore.Audio.AudioColumns.ALBUM_ART, но он не существует на самом деле.ContentResolver.query (MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null, null); - возвращает курсор со всеми столбцами, а ALBUM_ART - нет. –

+1

Есть только столбцы ALBUM, ALBUM_ID, ALBUM_KEY в курсоре, но нет ALBUM_ART –

2

Основываясь на ваших комментариях к другим, кажется, что ваш вопрос о Android и о том, как получить обложку альбома в целом. Возможно, полезно будет this article по извлечению обложек альбомов из Amazon. Когда у вас есть местная копия и сохраните ее, как предложил Ник, я считаю, что вы должны получить ее так, как предложил Фуджи.

+0

Нет, я не хочу получать обложку альбома вообще. В тегах ID3v2 для обложки есть опция. Android разбирает большую часть поля ID3v2, и вопрос заключается в том, как получить встроенное скрытое искусство в теге ID3v2, не используя amazon или некоторые другие веб-службы. –

+1

Возможно, вопрос немного запутан, может быть, правильный будет извлекать «Прикрепленное изображение» из Тег ID3v2 на Android. http://www.id3.org/id3v2.3.0 для получения дополнительной информации о прикрепленном изображении –

2

Здесь я могу прикрепить одну функцию, которая возвращает обложку альбома из магазина мультимедиа.

Здесь, в функции, нам просто нужно передать album_id, который мы получаем из магазина Media.

public Bitmap getAlbumart(Long album_id) 
    { 
     Bitmap bm = null; 
     try 
     { 
      final Uri sArtworkUri = Uri 
       .parse("content://media/external/audio/albumart"); 

      Uri uri = ContentUris.withAppendedId(sArtworkUri, album_id); 

      ParcelFileDescriptor pfd = context.getContentResolver() 
       .openFileDescriptor(uri, "r"); 

      if (pfd != null) 
      { 
       FileDescriptor fd = pfd.getFileDescriptor(); 
       bm = BitmapFactory.decodeFileDescriptor(fd); 
      } 
    } catch (Exception e) { 
    } 
    return bm; 
} 
5

Вы можете использовать

MediaMetadataRetriever

класс и получить отслеживать данные есть название, исполнитель, альбом, изображение

Bitmap GetImage(String filepath)    //filepath is path of music file 
{ 
Bitmap image; 

MediaMetadataRetriever mData=new MediaMetadataRetriever(); 
mData.setDataSource(filePath); 
    try{ 
      byte art[]=mData.getEmbeddedPicture(); 
      image=BitmapFactory.decodeByteArray(art, 0, art.length); 
     } 
    catch(Exception e) 
     { 
      image=null; 
     } 
    return image; 
} 
7

Я не знаю, почему все делают это настолько сложным, что вы можете использовать Glide для achi Накануне это простой и эффективный способ только с 1 строки кода

Объявить этот путь в App Константы -

final public static Uri sArtworkUri = Uri 
       .parse("content://media/external/audio/albumart"); 

Get Image Uri с помощью альбома ID

Uri uri = ContentUris.withAppendedId(PlayerConstants.sArtworkUri, 
         listOfAlbums.get(position).getAlbumID()); 

Теперь просто отображать обложки альбомов используя ури: -

Glide.with(context).load(uri).placeholder(R.drawable.art_default).error(R.drawable.art_default) 
        .crossFade().centerCrop().into(holder.albumImage); 

Glide будет обрабатывать кеширование, scali ng и ленивая загрузка изображений для вас.

Надеюсь, что это поможет кому-то.

+2

Спасибо, что это работает для меня .... – redblood

Смежные вопросы