一只火狐的杂物间 · OasisAkari Works

小米手机系统下壁纸轮播的几个踩坑

本文最后更新于:1/1/1970, 12:00:00 AM

本文章属个人记录用,可能不适用于其它手机系统。

本人踩坑了几个可行的方法在小米手机系统上实现壁纸的轮播。

需求

其实很简单,我只是需要一个功能,使手机的壁纸能够定时切换罢了。

令人没想到的是,仅仅是这么一个简单的自定义的功能,小米却一直都做不好(请看下文),于是我不得不仔细研究了一下替代的方案。

官方的自动壁纸切换功能的问题

主题商店内部的“壁纸轮播”功能(现已下架)

优点

唯一优点大概是比较好找,仅此而已罢了(虽然现在入口已经移除了)

缺点

  1. 无法同步锁屏和桌面的壁纸,即使是将两个壁纸库的壁纸切换顺序设成一致,壁纸也会在长时间使用手机后慢慢无法同步而顺序错位。

  2. 由于上述的实现问题,锁屏和桌面联动的解锁特效无法正确触发。(解锁进入桌面过渡时会莫名其妙的出现一个模糊的遮罩)

  3. 小米系统的“莫奈取色”问题(这个最严重)。

安卓 12 引入了新的 md3 设计语言(为系统全局),切换壁纸后系统会对壁纸颜色进行重新采样取色并全局调整 UI 主题色(本站也在使用这一套设计和取色系统),但国产 UI 大多不遵循 md3 而是另造了一套 UI,而没有利用 md3 相关的功能,但为了兼容原生 app,此套逻辑依然在底层系统存在。

但小米系统由于未知的实现问题,导致每次重新取色后,大部分正在运行的应用会被强制停止(包括系统桌面)

更具体的表现为:系统桌面时不时重载,播放的音乐软件(如网易云)崩溃并暂停播放,国产应用(如微信)出现冷启动现象,极大地影响到使用体验。

(此 bug 自从 MIUI 13 适配安卓 12 时起就一直存在至今,也是本文为什么没有单指 MIUI 或者 Xiaomi HyperOS 而是使用“小米手机系统”一词)

(不确定其它品牌的手机系统对于“莫奈取色”的实现情况如何,本文章基于个人感受所写所以不考虑其它品牌系统)

自带的“小米锁屏画报”

优点

  1. 大概是小米使用了一种变通的方法绕过了“莫奈取色”的 bug,使壁纸切换的时候不会自动停止应用了。

  2. 可以自定义壁纸的裁切范围,不用手动设置好图片的范围这样子。

缺点

  1. 加入轮播的壁纸清晰度会被压缩,导致使用的壁纸看上去没有原图通透,无法发挥手机屏幕最佳效果(这个尚可接受)。

  2. 会在锁屏中加入“进入锁屏画报”的入口(这个是搅屎棍)。

具体表现为:锁屏状态下,点击屏幕一下就会弹出一个毫无意义的“进入锁屏画报”的入口,而这个入口你无法使用返回手势退出,只能再次点击屏幕一下返回且无任何返回提示(与正常交互逻辑冲突),且你只要点击手机屏幕的下半部分就会进入锁屏画报(无论你有没有点到那个进入按钮),小米又在锁屏画报内加入了很多无关功能,假如你开启了手机的双击亮屏功能,然后你又喜欢出门的时候一直把手机拿在手上,很有可能会误触进入到锁屏画报内瞎乱点击,下载广告 app 或者刷起了资讯文章。

以上几点原因,个人认为小米在系统质感打磨上依然有待提高。也因此我需要一个能够满足我的第三方的软件来实现这个功能。

使用第三方软件

不过有点好笑的是,这个年头了,能实现壁纸轮播功能的第三方软件不知道为什么也没几个。且大多都与小米手机系统存在着或多或少的问题。

Wallpaper Engine?

属于动态壁纸服务,也可以设置壁纸轮播,但是个人实测体验下来并不好。

缺点:

  1. 小米手机系统无法对动态壁纸设置全屏 AOD,无法利用小米 15 的屏幕功能。

  2. 使用了动态壁纸后,小米手机系统无法对壁纸进行自动采样调整色彩,导致如果设置了背景过白的壁纸,会导致无法在桌面或者锁屏看清状态栏等部件的信息。

  3. “莫奈取色”问题也会时不时触发,导致应用频繁重载的情况,使用体验并不好。

本人只是需要一个能够切换静态壁纸的工具,所以这个选项被我 pass 掉了。

Paperize(这个目前最满意)

一个使用 md3 控件开发的开源壁纸切换工具,没有任何广告或者无关功能。

项目地址:https://github.com/Anthonyy232/Paperize

优点:

大概就是界面是基于 md3 适配的且更新时间比较近,不是上古 app,可以兼容最新系统。可以精确调整切换时间,且自带了几个滤镜。

缺点:

  1. 无法在界面内直接调整壁纸的位置,你需要手动裁切好壁纸后再导入进行轮播。

  2. 目前版本似乎只能添加文件夹进行轮播(应该是 bug),选择单张壁纸没有效果。

  3. 与小米手机的系统存在着一些功能适配上的问题,具体如下:

    • 锁屏输入密码的模糊遮罩被移除,导致需要输入密码时会看不清数字(这个影响较小,因为大多数情况下都是用指纹解锁手机)

    • 与全屏 AOD 功能存在逻辑冲突,当前小米手机系统的全屏 AOD 功能,会在 Paperize 切换壁纸后强制进入黑屏背景状态,点亮屏幕后才可恢复全屏 AOD,于是可能存在着大半部分时间息屏都无法正常显示壁纸的情况。

针对第3点的黑屏问题,我 fork 了 Paperize 的仓库,然后花了半天时间研究了一下源码(我没写过 kotlin),照葫芦画瓢地在工具内增加了一个“在非可交互状态下跳过”的功能,使 Paperize 能够在屏幕锁定状态下停止壁纸切换,并在点亮屏幕后恢复正常运作,变相解决了这个问题。

下载地址见此:https://github.com/OasisAkari/Paperize/releases

相关更改已提交合并进上游,请在原项目处下载

比起其它的会切实地影响到使用体验的问题来说,综合体验下来这个最好,自此大概壁纸切换的问题就算是解决了。

ColorBlendr(解决莫奈取色问题)

解决了壁纸切换的问题,但是系统的莫奈取色问题依然没有解决。在当前的 Hyper OS 2 下,尽管似乎取色不会再重载桌面了,但是依然会影响到其它国产软件的运作。

为此需要使用到这个小工具,来固定系统的莫奈取色:

https://github.com/Mahmud0808/ColorBlendr/releases

本工具可在无 Root 的权限的情况下使用 Shizuku 来使用限制的功能,但对于解决当前的这个问题来说(固定调色板),已经够用了。

由于国产 UI 大多都不太遵循 md3 的规范,固定调色板几乎不会影响到原生 UI 以外的大多数东西。(如小米默认的几个锁屏样式,都有着自己的采样系统,所以样式和背景融合方面不会出现问题)

缺点大概是启动 Shizuku 需要一点点的玩机技巧,且重启手机之后需要手动重新激活一次。不过手机毕竟也不需要频繁重启,这一点已经够用了。

大概以上,完结撒花。

3日内不再提醒