Most robust way to fetch album art in Android

后端 未结 4 1368
没有蜡笔的小新
没有蜡笔的小新 2020-12-09 23:24

Please note that I have already been through similar questions and their answers here and on other websites. I also have a solution that works on some devices (my G2X runnin

相关标签:
4条回答
  • 2020-12-09 23:56

    This below code snippet returns the uri for the album art cache present in the MediaStore. may be this will help.

                Cursor cursorAudio = managedQuery(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, {MediaStore.Audio.Media.ALBUM_ID, MediaStore.Audio.Media.DATA}, MediaStore.Audio.Media.DATA+ " LIKE \"" + path+ "\"", null, null);if(cursorAudio != null  && cursorAudio.moveToFirst()){
            Long albumId = Long.valueOf(cursorAudio.getString(cursorAudio.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID)));
            cursorAudio.close();
            Cursor cursorAlbum = managedQuery(MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI, {MediaStore.Audio.Albums._ID, MediaStore.Audio.Albums.ALBUM_ART}, MediaStore.Audio.Albums._ID+ "=" + albumId, null, null);
            if(cursorAlbum != null  && cursorAlbum.moveToFirst()){
                String uri = cursorAlbum.getString(cursorAlbum.getColumnIndex(MediaStore.Audio.Albums.ALBUM_ART));
                cursorAlbum.close();
                if(uri != null){
                    return Uri.parse(uri);
                }
            }
    
    0 讨论(0)
  • 2020-12-10 00:06
    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);
    

    More complete sample code can be found in Android Music player source here https://github.com/android/platform_packages_apps_music/blob/master/src/com/android/music/MusicUtils.java method getArtworkQuick.

    0 讨论(0)
  • 2020-12-10 00:17

    I'd like to modify Chirag Raval's answer by using Picasso library. It is simple to use and very powerful.

    final Uri sArtworkUri = Uri.parse("content://media/external/audio/albumart");
        Uri uri = ContentUris.withAppendedId(sArtworkUri, arrayList.get(i).getArt());
        Picasso.with(context).load(uri).placeholder(R.mipmap.ic_launcher).error(R.mipmap.ic_launcher)
                .into(ivPic);
    

    For full documentation, refer this.

    0 讨论(0)
  • 2020-12-10 00:21

    Here i can attach one function that is return album art from media store . Here in function we just have to pass the album_id which we get from 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;
    }
    
    0 讨论(0)
提交回复
热议问题