10

我需要我的壁纸在预览模式(带有“设置”和“设置..”的屏幕)下表现不同。我怎么知道它什么时候画在那里?

4

3 回答 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 回答