我正在尝试从音乐中获取专辑艺术uri(如果为空,则显示我自己的应用内可绘制(
但我得到了:
java.lang.NullPointerException:decodeResource(context.r…rces,r.drawable.ic_logo(不得为null
实用程序.kt
fun getAlbumArtBitmap(context: Context, albumId: Long): Bitmap {
try {
return when {
Build.VERSION.SDK_INT >= Build.VERSION_CODES.P -> {
val source = ImageDecoder.createSource(
context.contentResolver,
getAlbumArtUri(albumId)
)
ImageDecoder.decodeBitmap(source)
}
else -> MediaStore.Images.Media.getBitmap(
context.contentResolver,
getAlbumArtUri(albumId)
)
}
} catch (e: FileNotFoundException) {
Timber.e(e)
} catch (e: UnsupportedOperationException) {
Timber.e(e)
}
return BitmapFactory.decodeResource(context.resources, R.drawable.ic_logo)
}
drawable(R.drawable.ic_logo(是一个xml矢量可绘制文件(导入svg(,位于可绘制文件夹中
Player.kt
val artwork = getAlbumArtBitmap(context, song.albumId)
putBitmap(MediaMetadataCompat.METADATA_KEY_ALBUM_ART, artwork)
显然,R.drawable.ic_logo是一个向量图像。
我最终使用了这个:
ContextCompat.getDrawable(context, R.drawable.ic_logo)?.toBitmap()
将矢量绘图转换为位图,效果很好!