10

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

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

WallpaperManager.getWallpaperInfo()或者WallpaperManager.peekDrawable()也不工作,因为getWallpaperInfo()无论当前的锁屏壁纸如何,都会返回我的动态壁纸,并且peekDrawable()即使我的动态壁纸为两个屏幕都设置了,也会返回一个有效的可绘制对象。我试着听WallpaperService.Engine.onTouchEvent(..),但来自锁屏的触摸事件并没有传递到我的动态壁纸,因为它们被解锁滑块消耗掉了。

有没有其他方法可以检测我的动态壁纸是否是当前的锁屏壁纸?我对反射黑客、解决方法以及所有能让我做到这一点的东西都很好。

编辑:它也适用于 Galaxy Note 2,而不适用于 Xperia T LT30p

4

2 回答 2

2

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

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

于 2013-02-03T05:49:36.537 回答
0

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

在此处输入图像描述

然后你可以得到哪个壁纸属于哪个类型。

另一种选择是WallpaperManager.getWallpaperId

在此处输入图像描述

于 2018-07-12T16:22:14.663 回答