Android Media Session API - 如何将 url 设置为 METADATA_KEY_ALBUM_ART 字段

问题描述

在 android 媒体会话 api 中,可以使用媒体会话元数据中的键 MediaMetadata.MetaDATA_KEY_ALBUM_ART_URI 设置图像。根据文档,它接受该值作为 Uri 格式的字符串

 /**
 * The artwork for the album of the media's original source as a Uri
 * formatted String. The artwork can be loaded using a combination of
 * {@link ContentResolver#openInputStream} and
 * {@link BitmapFactory#decodeStream}.
 * <p>
 * For the best results,Uris should use the content:// style and support
 * {@link ContentResolver#EXTRA_SIZE} for retrieving scaled artwork through
 * {@link ContentResolver#openTypedAssetFileDescriptor(Uri,String,Bundle)}.
 */
 public static final String MetaDATA_KEY_ALBUM_ART_URI = "android.media.Metadata.ALBUM_ART_URI";

设置值

  MediaMetadata.Builder()
     .putString(MediaMetadata.MetaDATA_KEY_TITLE,it.name)
     .putString(MediaMetadata.MetaDATA_KEY_ARTIST,it.artist)
     .putString(MediaMetadata.MetaDATA_KEY_ALBUM_ART_URI,...)
     .build()

那么如何使用 URL 或位图对象来设置这个值,而不是参考本地存储。

有没有一种方法可以从在线资源加载此图像,而无需将其存储在应用程序存储中?

解决方法

我们可以使用 METADATA_KEY_ALBUM_ART 值代替 METADATA_KEY_ALBUM_ART_URI 将位图对象设置为 Media session API 中的 MediaMetadata 并将其用于显示目的 在媒体会话通知中。

MediaMetadata.Builder()
    ...
    .putBitmap(MediaMetadata.METADATA_KEY_ALBUM_ART,getBitmapFromURL(url))



private fun getBitmapFromURL(url : String):Bitmap{
    // Download image as a bitmap using a library like Glide,Picasso etc.
}