问题描述
在 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.
}