【问题标题】:Find out if different home- and lockscreen wallpapers are set查看是否设置了不同的主屏幕和锁屏壁纸
【发布时间】:2013-01-23 16:24:27
【问题描述】:

我有一个正在运行的动态壁纸并对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,bot 不适用于 Xperia T LT30p

【问题讨论】:

  • 你试过 WallpaperService.Engine.onVisibilityChanged(..) 吗?
  • 是的,isVisible() 只是返回传递给onVisibilityChanged() 的最后一个值,所以它们都在同一个数据库上工作
  • 你最终解决了这个问题吗?如果是这样,一些代码将不胜感激
  • @CigogneEveillee 不幸的是没有。我与三星支持进行了交谈,S3 Mini 的行为是固件中的一个错误,但我认为他们没有优先修复它。我就是这么走的。

标签: android live-wallpaper wallpaper


【解决方案1】:

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

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

【讨论】:

  • 谢谢,这一切我都知道,而且我现在对特定于设备的 hack 没问题。
  • 其实从API 24开始,是可以的。在这里查看我的答案:stackoverflow.com/a/51310448/878126
【解决方案2】:

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

然后你可以得到哪个壁纸是哪个类型的。

另一种选择是WallpaperManager.getWallpaperId

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-22
    • 2021-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多