了解是否设置了不同的家庭和锁屏壁纸

时间:2013-01-23 16:24:28

标签: android live-wallpaper wallpaper

我有一个正在运行的动态壁纸并对SCREEN_ON事件作出反应,以显示画布上的更改。但是在某些手机上,用户可以设置不同的锁屏和主屏幕壁纸(Touchwiz,一些Xperia设备)。当用户在锁定屏幕上设置了不同的壁纸时,我的动态壁纸不会显示。

在Galaxy S3上,我使用WallpaperService.Engine.isVisible(),当用户设置了不同的锁屏壁纸时,它正确返回false。但是,在Galaxy S3 Mini上,这不起作用,因为isVisible()会返回true,无论我的动态壁纸是否为活动的锁屏壁纸。

WallpaperManager.getWallpaperInfo()WallpaperManager.peekDrawable()也不起作用,因为getWallpaperInfo()会返回我的动态壁纸,无论当前的锁屏壁纸如何,peekDrawable()都会返回有效的drawable,即使我的两个屏幕都设置了动态壁纸。我试着听WallpaperService.Engine.onTouchEvent(..),但来自锁屏的触摸事件无法通过我的动态壁纸,因为它们被解锁滑块消耗。

有没有其他方法来检测我的动态壁纸是否是当前的锁屏壁纸?我很喜欢反思黑客,变通方法,所有能让我这样做的东西。

编辑:它也适用于Galaxy Note 2,机器人不在Xperia T LT30p上

2 个答案:

答案 0 :(得分:2)

AOSP版Android不支持锁屏壁纸。该功能完全由OEM(三星,索尼,LG等)制造,因此用于处理锁屏壁纸的API在OEM之间完全不同。此外,一些原始设备制造商不支持在loockscreens上使用动态壁纸,而其他的则支持。

由于它们是OEM添加的APIS,您应该使用反射来访问它们。但是,它可以在一个OEM设备上运行,但相同的代码不适用于其他OEM设备。

答案 1 :(得分:0)

从API 24开始,您可以使用WallpaperManager.getWallpaperFile

enter image description here

然后您可以获取哪种类型的墙纸。

另一种选择是WallpaperManager.getWallpaperId

enter image description here