我正在尝试显示媒体样式通知,并且我正在通过 Uri 从应用程序的本地文件目录中获取艺术图像。当我的应用程序中显示完全相同的图像时(通过线圈的 AsyncImage),它会以完美的质量显示,但是当图像显示在通知中时,它会变得非常像素化和模糊。
我正在使用 ImageDecoder.decodeBitmap 为通知创建位图,并使用 ImageDecoder.createSource 为其提供源(我尝试过使用内容解析器和 Uri 作为源并使用 File(Uri .path) 作为源,两者给出相同的结果)。
然后我使用 setLargeIcon 提供创建的位图。
奇怪的是,当我在创建位图之后并在传递给 setLargeIcon 之前记录位图的宽度和高度时,它报告的尺寸与原始图像相同,因此在传递给媒体样式通知之前看起来很好。
有什么想法吗?
请尝试使用MediaSessionCompat的setMetadata()。
MediaSessionCompat mediasession = new MediaSessionCompat(..);
MediaMetadataCompat.Builder bld = new MediaMetadataCompat.Builder();
//put metadata such as title, artist...
bld.putBitmap(BITMAP_FROM_RESOURCE);
mediaSession.setMetadata(bld.build());
MediaStyle 通知似乎没有使用 setLargeIcon 中的图像。
这个问题首先出现在Android 12上,之前在Android 10上不需要专门设置位图。所以如果是旧设备,仍然可以使用setLargeIcon。但Android 10+ 最好使用标准方法。
顺便说一句,METADATA_KEY_ALBUM_ART 也可以用作键值放入位图中。
builder.putBitmap(MediaMetadataCompat.METADATA_KEY_ALBUM_ART, yourBitmap)