2013-07-10 6 views
5

Ich versuche, einen MP3-Player zu bauen, und ich möchte, dass die ImageView die Albumcover der jeweiligen Songs anzeigen. Ich habe Folgendes versucht, aber es funktioniert nicht.Wie kann ich Album Art mit MediaStore.Audio.Albums.ALBUM_ART anzeigen?

albumcover = (ImageView) findViewById(R.id.cover); 

String coverPath = songsList.get(songIndex).get(MediaStore.Audio.Albums.ALBUM_ART); 
Drawable img = Drawable.createFromPath(coverPath); 
albumcover.setImageDrawable(img); 

Wenn ich versuche, die Songs zu spielen, bekomme ich nur einen leeren Bildschirm im ImageView.

+0

auch sehen http://stackoverflow.com/a/28624058/3496570 und http://stackoverflow.com/a/28624084/3496570 – Nepster

Antwort

12

Hier ist, wie ich Albumcover für einen Song bekommen:

Cursor cursor = getContentResolver().query(MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI, 
       new String[] {MediaStore.Audio.Albums._ID, MediaStore.Audio.Albums.ALBUM_ART}, 
       MediaStore.Audio.Albums._ID+ "=?", 
       new String[] {String.valueOf(albumId)}, 
       null); 

if (cursor.moveToFirst()) { 
    String path = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Albums.ALBUM_ART)); 
    // do whatever you need to do 
} 

albumId für diesen Song zu MediaStore.Audio.Media.ALBUM_ID bezieht.

Wenn Sie nach Albumcover für einen bestimmten Song (anstatt in einer Liste von Alben) suchen, ist es ein zweistufiger Prozess, da ALBUM_ART eine Eigenschaft von MediaStore.Audio.Albums ist und nicht direkt verfügbar ist als Song-Metadaten.

+0

Hey Ken, wie kann ich zeigen das Albumcover für das ganze Album ....? –

+0

Was kann man von der Zeichenkette machen, nachdem ich sie bekommen habe? Wie kann ich die Uri in Bitmap umwandeln? –

+1

@AnkitSrivastava die Zeichenfolge ist der Pfad zum Album Art Bild, so können Sie es in ein Bitmap, zum Beispiel mit 'BitmapFactory.decodeFile (String Pfad) ' –

0

Sie sollten Uri.parse verwenden ("content: // media/external/audio/albumart"); das Album suchen. die erste Antwort Ausnahme auf einige Telefon (zumindest mir)

4

Wenn Sie Album-ID haben bekommen können Sie Album Bild uri erhalten: -

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

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

Und wenn Sie ein Bild uri haben, können Sie verwenden eines der Bildlader Glide, Picaso, UIL, um Bilder anzuzeigen.

       **OR** 

Sie können Ihr eigenes Bild loader

public Bitmap getAlbumart(Context context, Long album_id) { 
    Bitmap albumArtBitMap = null; 
    BitmapFactory.Options options = new BitmapFactory.Options(); 
    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(); 
      albumArtBitMap = BitmapFactory.decodeFileDescriptor(fd, null, 
        options); 
      pfd = null; 
      fd = null; 
     } 
    } catch (Error ee) { 
    } catch (Exception e) { 
    } 

    if (null != albumArtBitMap) { 
     return albumArtBitMap; 
    } 
    return getDefaultAlbumArtEfficiently(context.getResources()); 
} 



public Bitmap getDefaultAlbumArtEfficiently(Resources resource) { 

    if (defaultBitmapArt == null) { 

     defaultBitmapArt = decodeSampledBitmapFromResource(resource, 
       R.drawable.default_album_art, UtilFunctions 
         .getUtilFunctions().dpToPixels(85, resource), 
       UtilFunctions.getUtilFunctions().dpToPixels(85, resource)); 

    } 
    return defaultBitmapArt; 
} 
5
ContentResolver musicResolve = getContentResolver(); 
    Uri smusicUri = android.provider.MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI; 
    Cursor music =musicResolve.query(smusicUri,null   //should use where clause(_ID==albumid) 
     ,null, null, null); 



    music.moveToFirst();   //i put only one song in my external storage to keep things simple 
    int x=music.getColumnIndex(android.provider.MediaStore.Audio.Albums.ALBUM_ART); 
     String thisArt = music.getString(x); 


    Bitmap bm= BitmapFactory.decodeFile(thisArt); 
     ImageView image=(ImageView)findViewById(R.id.image); 
     image.setImageBitmap(bm); 
+0

Antwort von Ken gegeben ist auch richtig, aber als Newcomer muss ich viel Zeit verbringen, damit es funktioniert. Deshalb habe ich die vollständige Antwort hochgeladen. –

0

Der Code unten arbeitete für mich schreiben. Ich weiß, es wurde bereits beantwortet, es kann nützlich sein, wenn jemand nach Referenz sucht.

public void getAlbumArt() { 
    try { 
     ContentResolver cr = getContentResolver(); 
     Uri uri = MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI; 

     Cursor cursor = cr.query(uri, null, null, null, null); 

     if (cursor != null && cursor.moveToFirst()) { 
      int albumart = cursor.getColumnIndex(MediaStore.Audio.Albums.ALBUM_ART); 
      do { 
       String Albumids = cursor.getString(albumart); 
       Albumid.add(Albumids); 

      } while (cursor.moveToNext()); 
     }cursor.close(); 
    } catch (NumberFormatException e){ 
     e.printStackTrace(); 
    } 
} 
public void getSelectedPath(){ 
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
      String path= String.valueOf(listView.getItemAtPosition(i)); 

       if(path.equals("null")){ 
       ImageView imgv=(ImageView)view.findViewById(R.id.imageView); 
       imgv.setImageResource(R.drawable.unknowalbum); 
       imgv.setMaxHeight(50); 
       imgv.setMaxWidth(50); 

      } 
      else{ 
       Drawable image=Drawable.createFromPath(path); 
       ImageView imgview=(ImageView)view.findViewById(R.id.imageView); 
       imgview.setImageDrawable(image); 

      } 
     } 
    }); 
} 

für vollständigen Code Besuch http://vasistaguru.blogspot.com/2017/02/get-albumart-and-trackname-using.html

2

Diese Methode Rückkehr Arraylist mit Songs Pfad und Albumcover.

public static ArrayList<CommonModel> getAllMusicPathList(Context context) { 
    ArrayList<CommonModel> musicPathArrList = new ArrayList<>(); 
    Uri songUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; 

    Cursor cursorAudio = context.getContentResolver().query(songUri, null, null, null, null); 
    if (cursorAudio != null && cursorAudio.moveToFirst()) { 

     Cursor cursorAlbum; 
     if (cursorAudio != null && cursorAudio.moveToFirst()) { 

      do { 
       Long albumId = Long.valueOf(cursorAudio.getString(cursorAudio.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID))); 
       cursorAlbum = context.getContentResolver().query(MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI, 
         new String[]{MediaStore.Audio.Albums._ID, MediaStore.Audio.Albums.ALBUM_ART}, 
         MediaStore.Audio.Albums._ID + "=" + albumId, null, null); 

        if(cursorAlbum != null && cursorAlbum.moveToFirst()){ 
         String albumCoverPath = cursorAlbum.getString(cursorAlbum.getColumnIndex(MediaStore.Audio.Albums.ALBUM_ART)); 
         String data = cursorAudio.getString(cursorAudio.getColumnIndex(MediaStore.Audio.Media.DATA)); 
         musicPathArrList.add(new CommonModel(data,albumCoverPath ,false)); 
        } 

       } while (cursorAudio.moveToNext()); 
     } 
    } 
    return musicPathArrList; 
} 

Dies ist CommonModel.

public class CommonModel { 

private String path; 
private boolean selected; 

public String getAlbumCoverPath() { 
    return albumCoverPath; 
} 

public void setAlbumCoverPath(String albumCoverPath) { 
    this.albumCoverPath = albumCoverPath; 
} 

private String albumCoverPath; 

public CommonModel(String path, String albumCoverPath, boolean b) { 
    this.path = path; 
    this.albumCoverPath=albumCoverPath; 
    this.selected=b; 
} 

public String getPath() { 
    return path; 
} 

public void setPath(String path) { 
    this.path = path; 
} 

public boolean getSelected() { 
    return selected; 
} 

public void setSelected(boolean selected) { 
    selected = selected; 
} 
}