2009-12-23 10 views
23

Sto sviluppando una sorta di lettore multimediale per Android. La domanda è come posso ottenere la copertina del file audio su Android. Ad esempio, il lettore multimediale Android predefinito mostra le copertine degli album quando si elencano gli album, come posso ottenere queste opere d'arte.copertina art su android

+0

Poiché sembra che ci sia un po 'di confusione su quale parte della tua applicazione hai bisogno di aiuto, potresti voler aggiornare la tua domanda di conseguenza. –

+1

puoi anche provare questo: http://stackoverflow.com/questions/10209176/extract-album-cover-from-mp3-file-in-android?rq=1 – Chepech

risposta

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

codice di esempio più completa si possono trovare in fonte lettore musicale Android qui https://github.com/android/platform_packages_apps_music/blob/master/src/com/android/music/MusicUtils.java metodo getArtworkQuick.

+0

ho provato sopra il codice, riesco a ottenere l'arte dell'album ma non nell'ordine corretto sull'emulatore, sul mio Galaxy S posso vedere le copertine degli album per una mp3 dove ho più di 100 file. Ancora una volta sul mio Galaxy S la sua immagine mostra per la canzone sbagliata (solo la canzone più in alto). Qualche suggerimento per risolvere questo problema? –

+1

È stato un mio errore, invece di id album stavo passando id canzone. Sta funzionando bene ora. grazie –

+0

ehi ... come prendi l'albumid per una canzone particolare ?? –

0

Android riconosce solo i file denominati "AlbumArt.jpg" come copertine degli album. Basta mettere le foto con quel nome nella cartella dell'album e starai bene ..

+1

Scusa forse la domanda era poco confusa. Sto sviluppando un'applicazione e voglio ottenere la copertina dell'album dalla mia applicazione. –

0

Non so se hai letto che Google sta facendo Stackoverflow il official Android app development Q&A medium ma per le domande dei principianti ... Ora, non so niente di sviluppare in Andriod, ma una rapida ricerca del sito Android Developers, ho trovato questo:

MediaStore.Audio.AlbumColumns

Speriamo che ti aiuto.

+1

Sì, noto anche che MediaStore.Audio.AudioColumns.ALBUM_ART è presente ma in realtà non esiste.ContentResolver.query (MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null, null); - restituisce il cursore con tutte le colonne e ALBUM_ART non è lì. –

+1

Sono presenti solo le colonne ALBUM, ALBUM_ID, ALBUM_KEY nel cursore ma non ALBUM_ART –

2

In base ai commenti degli altri, sembra che la tua domanda riguardi meno Android e altro su come ottenere le copertine degli album in generale. Forse this article sul recupero della copertina dell'album da Amazon sarà utile. Una volta che hai una copia locale e la memorizzi come suggerito da Nick, credo che dovresti essere in grado di recuperarla come suggeriva Fudgey.

+0

No non voglio ottenere la copertina dell'album in generale. È disponibile un tag opzionale nei tag ID3v2 per la copertina. Android sta analizzando la maggior parte del campo ID3v2 e la domanda è come ottenere l'arte nascosta incorporata nel tag ID3v2 non usando Amazon o altri servizi web –

+1

Forse la domanda è poco confusa, forse quella corretta estrarrà "Immagine allegata" da Tag ID3v2 su Android. http://www.id3.org/id3v2.3.0 per ulteriori informazioni sulla foto allegata –

2

Qui posso allegare una funzione che restituisce le copertine degli album dal negozio multimediale.

Qui in funzione dobbiamo solo passare l'album_id che otteniamo da Media store.

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

È possibile utilizzare

MediaMetadataRetriever

classe e ottenere informazioni tracciare cioè titolo, artista, album, Immagine

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

io non so perché tutti lo rendono così complicato da poter utilizzare Glide eve questo in modo più semplice e efficace con appena 1 riga di codice

Dichiarare questo percorso in App Costanti -

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

ottenere l'immagine Uri utilizzando Album ID

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

Ora semplicemente visualizzare le copertine degli album utilizzando uri: -

Glide gestirà il caching, scali caricamento lento e pigro di immagini per te.

Spero che aiuti qualcuno.

+2

Grazie amico questo funziona per me .... – redblood

Problemi correlati