Auc*_*Auc 7 android android-wallpaper wallpapermanager
这是最新版本 Android 中的 WallpaperManager 的错误吗?
设置壁纸时,会自动销毁并重新加载当前activity。
此行为似乎仅影响 Android 12 及更高版本。用 Kotlin 编写代码非常容易复制:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val randomResourceList = arrayListOf(R.drawable.image1, R.drawable.image2, R.drawable.image3, R.drawable.image4, R.drawable.image5)
val randomValue = (0 until randomResourceList.size).random()
val wallpaper = randomResourceList[randomValue]
val bmp = BitmapFactory.decodeResource(resources, wallpaper)
val wallpaperManager = WallpaperManager.getInstance(this)
wallpaperManager.setBitmap(bmp, null, true)
}
override fun onDestroy() {
super.onDestroy()
Log.d("tag", "Destroyed.")
}
Run Code Online (Sandbox Code Playgroud)
添加一些图像(包括几张,因为如果壁纸图像与上一个相同,则不会设置壁纸,因此是随机的)
然后,您应该看到活动被销毁并在一个周期中重新加载。不会引发任何错误,并且壁纸实际上每次都会更改。
在我的特定情况下,在前台服务中的计时器上设置壁纸时,这会造成严重破坏。如果更换壁纸时用户恰好在屏幕上进行活动,则该活动将会被破坏。
您可以使用onSaveInstanceState()和onRestoreInstanceState()方法来执行此操作。
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val randomResourceList = arrayListOf(R.drawable.image1, R.drawable.image2, R.drawable.image3, R.drawable.image4, R.drawable.image5)
val randomValue = (0 until randomResourceList.size).random()
val wallpaper = randomResourceList[randomValue]
val bmp = BitmapFactory.decodeResource(resources, wallpaper)
val wallpaperManager = WallpaperManager.getInstance(this)
// Save the state of the activity.
val savedState = saveState()
// Set the wallpaper.
wallpaperManager.setBitmap(bmp, null, true)
// Restore the state of the activity.
restoreState(savedState)
}
override fun onDestroy() {
super.onDestroy()
Log.d("tag", "Destroyed.")
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1024 次 |
| 最近记录: |