之前的一个项目开发的支持锁屏壁纸和桌面壁纸。
开始时,有考虑从lockscreen做文章。在锁屏时,切换锁屏壁纸,进入home,再切换home壁纸。效果很差,卡顿,效率极低。
后来只能从WallpaperManager,WindowManager从考虑。最终实现了锁屏壁纸,效果很好。
WindowManagerService管理着各种窗口,Launcher, Lockscreen, InputMethodWindow, 以及其他的应用APP窗口。对于WindowManagerService来说他们都是一个个Window。ActivityManagerService调整这些Window的Z轴位置,以及可见性。来达到我们所看到的效果。因为android默认支持Launcher壁纸。所以在WindowManagerService的windows里只能看到这一个wallpaper。所以要再支持lockscreen wallpaper。只要再启动一个wallpaper window。当lockscreen时,将lockscreen wallpaper window, 调整到home wallpaper的窗口上面。就OK了。
首先看针对WindowManagerService的修改:
我们在WindowManagerService.java里添加支持lockscreen wallpaper 窗口方法addWallpaperWindowToken(),以及lockscreen wallpaper窗口变量mLockScreenWallpaperWindowToken。
这样WallpaperManagerService就可以调用WindowManagerService.addWallpaperWindowToken()来把Lockscreen wallpaper window 添加到系统的窗口列表中。