查找是否设置了不同的主屏幕和锁屏壁纸

10
我有一个运行中的动态壁纸,会根据SCREEN_ON事件在画布上显示变化。但是,在某些手机上,用户可以设置不同的锁屏和主屏幕壁纸(Touchwiz、一些Xperia设备)。当用户在锁屏界面设置了不同的壁纸时,我的动态壁纸就不能显示了。
在Galaxy S3上,我使用WallpaperService.Engine.isVisible(),当用户设置了不同的锁屏壁纸时,它能正确地返回false。然而,在Galaxy S3 Mini上,这个方法不起作用,因为isVisible()无论我的动态壁纸是否为当前锁屏壁纸,它都会返回trueWallpaperManager.getWallpaperInfo()WallpaperManager.peekDrawable()也不起作用,因为getWallpaperInfo()无论当前锁屏壁纸是什么,它都会返回我的动态壁纸,而peekDrawable()会返回一个有效的Drawable对象,即使我的动态壁纸被设置为两个屏幕的壁纸。我尝试监听WallpaperService.Engine.onTouchEvent(..),但是由于解锁滑块消耗了锁屏界面的触摸事件,所以来自锁屏界面的触摸事件无法传递到我的动态壁纸。
有没有其他方法来检测我的动态壁纸是否为当前锁屏壁纸?我可以接受反射-hacks、变通方法,任何能让我做到这一点的方法。
编辑:在Galaxy Note 2上也可以正常工作,但在Xperia T LT30p上不行。

你尝试过使用WallpaperService.Engine.onVisibilityChanged(..)吗? - StarPinkER
是的,isVisible()只返回传递给onVisibilityChanged()的最后一个值,因此它们都使用相同的数据。 - Thrakbad
你最终解决了这个问题吗?如果是的话,提供一些代码将不胜感激。 - Cigogne Eveillée
很遗憾,我和三星支持团队交流过,S3 Mini的行为是固件中的一个漏洞,但我认为他们没有高优先级来修复它。这就是我所了解到的。 - Thrakbad
2个回答

2

Android AOSP版本不支持锁屏壁纸。该功能完全由OEM(三星、索尼、LG等)制作,因此处理锁屏壁纸的API在OEM之间完全不同。此外,一些OEM只在锁定屏幕上不支持动态壁纸,而其他OEM则支持。

由于它们是OEM添加的API,您应该使用反射来访问它们。但是,它将在一个OEM设备上工作,但相同的代码将无法在其他OEM设备上工作。


谢谢,我知道这些,目前我对设备特定的hack也没问题。 - Thrakbad
实际上,从API 24开始就可以了。请看我的答案:https://dev59.com/bGYq5IYBdhLWcg3wcgLq#51310448 - android developer

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接