我需要我的壁纸在预览模式(带有“设置”和“设置..”的屏幕)下表现不同。我怎么知道它什么时候画在那里?
问问题
4247 次
3 回答
15
在onCreateEngine()
你可以使用的isPreview()
方法。
请注意,onCreateEngine()
“通常”会调用两次:一次是为预览创建实例,然后是在您实际设置壁纸时再次调用。
详情在这里:http: //developer.android.com/reference/android/service/wallpaper/WallpaperService.Engine.html
于 2011-04-06T02:23:40.910 回答
5
该isPreview()
方法可以在onCreate(SurfaceHolder holder)
实现的Engine的方法中调用。不在该onCreateEngine
方法中作为先前的答案,因为该方法尚未准备好。
于 2013-05-14T16:54:00.240 回答
1
除了代表的答案,我还会写。由于预览版和非预览版引擎实例可以同时存在,您可以在 WallpaperService 类中添加引擎的两个静态实例和一个局部变量(Kotlin 中的示例):
private var engine: OpenGLEngine? = null
private set
//...
companion object {
private var engineInstance: OpenGLEngine? = null
private var previewEngineInstance: OpenGLEngine? = null
//...
}
并在覆盖函数中使用它们
override fun onCreate(surfaceHolder: SurfaceHolder?) {
super.onCreate(surfaceHolder)
if (isPreview) {
previewEngineInstance = this@OpenGLEngine
engine = previewEngineInstance
} else {
engineInstance = this@OpenGLEngine
engine = engineInstance
}
//...
}
override fun onDestroy() {
if (isPreview) {
engine = engineInstance
previewEngineInstance = null
} else {
engine = previewEngineInstance
engineInstance = null
}
//...
super.onDestroy()
}
这样,您始终可以在 WallpaperService 中获取当前引擎实例并调用它的isPreview。
于 2020-11-22T16:09:55.843 回答