【问题标题】:Retrive the track image from android mediastore,.audio.media content provider?从 android mediastore、.audio.media 内容提供者中检索曲目图像?
【发布时间】:2014-04-13 13:06:24
【问题描述】:

是否可以从 mediastore 音频内容提供商检索每个曲目图像?我不确定他们是否为每个音轨提供单独的图像,或者是否每个专辑只有一个图像。如果可能,请提供解决方案或相应链接。

【问题讨论】:

    标签: android audio mediastore


    【解决方案1】:

    Android 不会将其保存为“曲目图像”,而是“专辑图像”。因此,您必须对专辑数据进行另一次查询:

    albumId 来自加载歌曲的光标:

    long albumId = cursor.getLong(7);
    Cursor artCursor = context.getContentResolver().query(
            MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI,
            new String[] {MediaStore.Audio.AlbumColumns.ALBUM_ART},
            MediaStore.Audio.Media._ID+" =?",
            new String[]{String.valueOf(albumId)},
            null);
    String albumArt;
    if(artCursor.moveToNext()) {
        albumArt = "file://"+artCursor.getString(0);
    } else {
        albumArt = null;
    }
    artCursor.close();
    
    if(albumArt != null) {
        BitmapFactory.decodeFile(new File(albumArt));
    }
    

    【讨论】:

    • 什么是“albumArt”字符串或位图的类型。我假设这是专辑图像的路径。但是我怎样才能从该路径获取图像?
    • 是的,就是路径。要获取它背后的位图,您可以使用BitmapFactory.decodeFile(new File(albumArt));
    • 由于提高了安全性,此解决方案不适用于 Android 10。
    【解决方案2】:

    此解决方案适用于 Android 10,使用 kotlin 和 glide:

        val uri = ContentUris.withAppendedId(
            Uri.parse("content://media/external/audio/albumart"),
            getItem(position)?.album_id?.toLong() ?: -1
        )
    
        Glide.with(holder.song_thumb.context)
            .load(uri)
            .into(holder.song_thumb)
    

    getItem(position)?.album_id 是使用 content provider 上的光标检索到的曲目上的专辑 ID。

    在 Android 10 上,此 Uri 可访问,而通过内容提供程序上的查询检索到的路径不可访问(与 READ_EXTERNAL_STORAGE 权限无关)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多