当我的壁纸进入预览模式(显示“设置”和“设置...”的屏幕)时,我希望它能表现出不同的功能。如何确定壁纸何时被绘制在该模式下?
当我的壁纸进入预览模式(显示“设置”和“设置...”的屏幕)时,我希望它能表现出不同的功能。如何确定壁纸何时被绘制在该模式下?
在 onCreateEngine()
中,您可以使用 isPreview()
方法。
请注意,onCreateEngine()
通常会被调用两次:一次用于创建预览实例,另一次在您实际设置壁纸时再次调用。
详情请参见:http://developer.android.com/reference/android/service/wallpaper/WallpaperService.Engine.html
isPreview()
方法可以在实现的 Engine 的 onCreate(SurfaceHolder holder)
方法中调用。不像前面的答案中的 onCreateEngine
方法,因为该方法还未准备好。< /p >
除了已经给出的答案,我还要补充一些内容。由于预览引擎和非预览引擎实例可以同时存在,因此您可以在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 方法。
onCreateEngine()
调用是在第一个关闭之后进行的?我问这个问题是因为我的偏好更改事件触发了两次。 - Rudey