我有一个正在运行的实时墙纸和react to SCREEN_ON
事件,以便在画布上显示更改。然而,在一些手机上,用户可以设置不同的锁屏和主屏幕墙纸(Touchwiz,一些Xperia设备)。当用户在锁屏上设置了不同的墙纸时,我的实时墙纸不会显示。
在Galaxy S3上,我使用的是WallpaperService.Engine.isVisible()
,当用户设置了不同的锁屏墙纸时,它会正确地返回false
。然而,在Galaxy S3 Mini上,这并不起作用,因为无论我的活动墙纸是否是活动的锁屏墙纸,isVisible()
都会返回true
。
WallpaperManager.getWallpaperInfo()
或WallpaperManager.peekDrawable()
也不起作用,因为无论当前的锁屏墙纸是什么,getWallpaperInfo()
都会返回我的实时墙纸,而peekDrawable()
则会返回一个有效的可抽取值,即使我的动态墙纸在两个屏幕上都设置了。我试着听WallpaperService.Engine.onTouchEvent(..)
,但来自锁屏的触摸事件无法到达我的实时墙纸,因为它们被解锁滑块消耗。
有没有其他方法来检测我的活动墙纸是否是当前的锁屏墙纸?我对反射--hack,变通,所有能让我这么做的东西都很满意。
编辑:它也适用于Galaxy Note2,而不适用于Xperia T LT30p
发布于 2013-02-03 13:49:37
Android的AOSP版本不支持锁屏墙纸。该功能完全由原始设备制造商(三星、索尼、LG等)制造。因此,用于处理锁屏墙纸的API在OEM之间完全不同。此外,一些OEM只支持loockscreens上的动态墙纸,而另一些OEM则支持。
因为它们是OEM添加的APIS,所以您应该使用反射来访问它们。然而,它可以在一个OEM设备上工作,但相同的代码不能在其他OEM设备上工作。
发布于 2018-07-13 00:22:15
从API24开始,可以使用:
然后你就可以知道哪种墙纸是哪种类型的。
另一种选择是:
https://stackoverflow.com/questions/14484394
复制相似问题