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

在Galaxy S3上,我使用了WallpaperService.Engine.isVisible(),当用户设置了其他锁屏墙纸时,它会正确返回false。但是,在Galaxy S3 Mini上这是行不通的,因为无论我的动态壁纸是否是 Activity 的锁屏壁纸,isVisible()都会返回true
WallpaperManager.getWallpaperInfo()WallpaperManager.peekDrawable()也不起作用,因为无论当前锁屏墙纸如何,getWallpaperInfo()都会返回我的动态墙纸,即使为两个屏幕都设置了我的动态墙纸,peekDrawable()也会返回有效的可绘制对象。我尝试听WallpaperService.Engine.onTouchEvent(..),但是锁屏上的触摸事件无法传递到我的动态壁纸,因为它们被解锁滑块占用。

还有其他方法可以检测我的动态壁纸是否是当前的锁屏壁纸吗?我对反射(reflection)性黑客,变通办法以及一切可以让我做到这一点的方法都很好。

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

最佳答案

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

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

关于android - 找出是否设置了不同的主屏幕和锁屏壁纸,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14484394/

10-11 00:18