Android 12+ 在使用WallpaperManager设置壁纸时可能会出现奇怪的行为,例如壁纸被拉伸或放大。
为了解决这个问题,我们需要在设置壁纸之前先获取壁纸的建议大小,然后将其缩放到设备的分辨率大小。
以下是一个示例代码,用于将壁纸设置为设备的分辨率大小:
val wallpaperManager = WallpaperManager.getInstance(context)
val displayMetrics = context.resources.displayMetrics
val screenWidth = displayMetrics.widthPixels
val screenHeight = displayMetrics.heightPixels
val wallpaperDrawable = wallpaperManager.drawable
val wallpaperWidth = wallpaperDrawable.intrinsicWidth
val wallpaperHeight = wallpaperDrawable.intrinsicHeight
val scaleFactor = max(wallpaperWidth / screenWidth, wallpaperHeight / screenHeight)
val scaledWidth = wallpaperWidth / scaleFactor
val scaledHeight = wallpaperHeight / scaleFactor
val scaledWallpaper = Bitmap.createScaledBitmap((wallpaperDrawable as BitmapDrawable).bitmap,
scaledWidth, scaledHeight, true)
wallpaperManager.setBitmap(scaledWallpaper)
如上所示,我们首先获取设备的分辨率,然后获取壁纸的原始大小。接下来,我们计算一个比例因子,使得壁纸可以被缩放到设备分辨率的大小。然后,我们使用比例因子来缩放壁纸,并使用WallpaperManager设置缩放后的壁纸。
通过这种方式,我们能够在Android 12+上消除WallpaperManager的奇怪行为,确保壁纸被正确地缩放和设置。