查询专辑封面总是返回内容的无条目:// media / external / audio / albumart / 31726

时间:2015-11-09 08:15:44

标签: android audio albumart

所以我现在已经尝试了一段时间了。获取mp3文件的专辑封面并将其显示在各自的ImageView上,我正在使用uri(“content:// media / external / audio / albumart”)

这是我获取专辑封面的方法

    public Bitmap getAlbumArt(long idAlbum){
    Bitmap bitmap = null;

    try{
        final Uri sArtworkUri = Uri.parse("content://media/external/audio/albumart");
        Uri uri = ContentUris.withAppendedId(sArtworkUri, idAlbum);
        ParcelFileDescriptor parcelFileDescriptor = getContext().getContentResolver().openFileDescriptor(uri,"r");
        if (parcelFileDescriptor != null){
            FileDescriptor fileDescriptor = parcelFileDescriptor.getFileDescriptor();
            bitmap = BitmapFactory.decodeFileDescriptor(fileDescriptor);
        }

    }catch (Exception e){
        e.printStackTrace();
    }
    return bitmap;
    } 

并且此方法始终返回

java.io.FileNotFoundException: No entry for content://media/external/audio/albumart/31726

其中31726是专辑ID。

由于我正在捕获此异常,并且如果它返回null,我将其设置为默认的专辑封面,每个mp3都将其ImageView设置为默认专辑封面。我正在使用我的三星Galaxy s3来运行应用程序,我的设备运行android 4.2.2 JellyBean。请有人帮助我做到这一点。

这是我申请专辑ID的方式

    Uri musicUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
    String[] columns = {
            MediaStore.Audio.Media.TITLE,
            MediaStore.Audio.Media.ARTIST,
            MediaStore.Audio.Albums._ID,
            MediaStore.Audio.Media.DATA
    };

    String where = MediaStore.Audio.Media.IS_MUSIC + "=1";

    Cursor musicCursor = usicResolver.query(musicUri,columns,where,null,    null);

然后在具有条件

的if循环中
    if(musicCursor.moveToFirst()){
    int albumId = musicCursor.getColumnIndex
                (MediaStore.Audio.Albums._ID);
    do{
          long idAlbum = musicCursor.getLong(albumId);

          //Then i send it to my above method getAlbumArt
          Bitmap songAlbumArt = getAlbumArt(idAlbum);

      }while(musicCursor.moveToNext());

     }

2 个答案:

答案 0 :(得分:1)

这就是我从专辑ID中查询封面艺术路径的方法:

private static String getCoverArtPath(long albumId, Context context) {

    Cursor albumCursor = context.getContentResolver().query(
            MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI,
            new String[]{MediaStore.Audio.Albums.ALBUM_ART},
            MediaStore.Audio.Albums._ID + " = ?",
            new String[]{Long.toString(albumId)},
            null
    );
    boolean queryResult = albumCursor.moveToFirst();
    String result = null;
    if (queryResult) {
        result = albumCursor.getString(0);
    }
    albumCursor.close();
    return result;
}

您可以使用上述方法返回的路径从BitmapFactory获取Bitmap:

BitmapFactory.decodeFile(coverArtPath);

答案 1 :(得分:0)

ImageLoader.getInstance().
    displayImage( ContentUris.withAppendedId(Uri.parse("content://media/external/audio/albumart"), song_tag.albumId).toString(),
            image,
            new DisplayImageOptions.Builder().cacheInMemory(true).showImageOnFail(R.drawable.stock6).resetViewBeforeLoading(true).build());

图像是ImageView的对象

song_tag.albumid是您必须发送以获取图片的相册ID

stock6是默认图片