2009-12-23 13 views
23

Ich entwickle eine Art Media Player für Android. Die Frage ist, wie kann ich das Cover-Art von Audio-Datei auf Android bekommen. Zum Beispiel zeigt der Standard-Android-Media-Player Albumcover, wenn Alben aufgelistet werden, wie kann ich diese Kunstwerke bekommen.Cover Art on Android

+0

Da es scheinbar ein wenig Verwirrung darüber gibt, mit welchem ​​Teil Ihrer Anwendung Sie Hilfe benötigen, sollten Sie Ihre Frage entsprechend aktualisieren. –

+1

können Sie dies auch versuchen: http://stackoverflow.com/questions/10209176/extract-album-cover-from-mp3-file-in-android?rq=1 – Chepech

Antwort

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

Ausführlichere Beispielcode kann in Android Musik-Player Quelle hier https://github.com/android/platform_packages_apps_music/blob/master/src/com/android/music/MusicUtils.java Methode getArtworkQuick finden.

+0

Ich habe oben Code versucht, ich kann Album Art, aber nicht in der richtigen Reihenfolge auf Emulator, auf meinem Galaxy S Ich kann Album Art für einen sehen mp3, wo ich mehr als 100 Datei habe. Ein weiteres auf meinem Galaxy S, das Bild für falsches Lied zeigt (nur das oberste Lied). Irgendwelche Vorschläge, um dieses Problem zu lösen? –

+1

Es war mein Fehler, anstelle von Album-ID ging ich Song-ID. Es funktioniert jetzt gut. danke –

+0

hey ... wie bekommt man Albumid für einen bestimmten Song? –

0

Android erkennt nur Dateien mit dem Namen "AlbumArt.jpg" als Albumcover. Legen Sie einfach die Bilder mit diesem Namen in den Albumordner und Sie werden in Ordnung sein.

+1

Sorry vielleicht war die Frage etwas verwirrend. Ich entwickle eine Anwendung und ich möchte die Album-Kunst von meiner Anwendung erhalten. –

0

Ich weiß nicht, wenn Sie lesen, dass Google Stackoverflow die official Android app development Q&A medium macht, aber für Anfänger Fragen ... Jetzt weiß ich nichts in andriod über die Entwicklung, aber eine schnelle Suche der Website für Android-Entwickler, fand ich diese:

MediaStore.Audio.AlbumColumns

Hoffentlich wird es helfen.

+1

Ja, ich bemerke auch, dass es MediaStore.Audio.AudioColumns.ALBUM_ART gibt, aber es existiert nicht wirklich. ContentResolver.query (MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null, null); - gibt den Cursor mit allen Spalten zurück und ALBUM_ART ist nicht da. –

+1

Es gibt nur ALBUM, ALBUM_ID, ALBUM_KEY Spalten im Cursor, aber keine ALBUM_ART –

2

Basierend auf Ihren Kommentaren zu anderen scheint es, dass Ihre Frage weniger über Android und mehr darüber, wie man Albumcover im Allgemeinen erhält. Vielleicht ist this article zum Abrufen von Albumcover von Amazon hilfreich. Sobald Sie eine lokale Kopie haben und diese speichern, wie Nick es vorgeschlagen hat, sollten Sie sie, wie von Fudgey vorgeschlagen, abrufen können.

+0

Nein ich möchte nicht das Album Kunst im Allgemeinen erhalten. Es gibt optionale ID3v2-Tags für Cover-Art. Android analysiert den größten Teil des ID3v2-Feldes und die Frage ist, wie man die eingebettete Coverart im ID3v2-Tag ohne amazon oder einige andere Webservices bekommt. –

+1

Vielleicht ist die Frage etwas verwirrend, vielleicht wird die richtige "Attached picture" aus ID3v2-Tag auf Android. http://www.id3.org/id3v2.3.0 für weitere Informationen über das beigefügte Bild –

2

Hier kann ich eine Funktion, die Rückgabe Albumcover aus Media Store ist.

Hier in Funktion müssen wir nur die album_id übergeben, die wir von Media Store erhalten.

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

können Sie verwenden

MediaMetadataRetriever

Klasse und erhalten verfolgen info dh Titel, Künstler, Album, Bild

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

Ich weiß nicht, warum Jeder macht es so kompliziert, dass Sie Glide zu Achi verwenden können Vorabend dies auf einfachste und effizienteste Weg, mit nur 1 Zeile Code

diesen Weg Konstanten in App deklarieren -

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

Get Bild Uri mit Album ID

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

einfach Jetzt Albumcover anzeigen mit uri: -

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

Glide wird Caching, scali ng und faul laden von Bildern für Sie.

Ich hoffe, es hilft jemandem.

+2

Danke Kumpel das funktioniert für mich .... – redblood