Android WallpaperManager 同时设置桌面壁纸与锁屏的问题

news/2024/11/8 15:28:58/

最近项目中,需要给手机设置桌面壁纸与锁屏。

大家都知道使用 WallpaperManager.setStream()方法就好

@RequiresPermission(android.Manifest.permission.SET_WALLPAPER)
public int setStream(InputStream bitmapData, Rect visibleCropHint,boolean allowBackup, @SetWallpaperFlags int which)

其中,该方法的最后一个参数就是用来标记该图像是应用于桌面壁纸还是锁屏的。

@Retention(RetentionPolicy.SOURCE)
public @interface SetWallpaperFlags {}/*** Flag: set or retrieve the general system wallpaper.*/
public static final int FLAG_SYSTEM = 1 << 0;/*** Flag: set or retrieve the lock-screen-specific wallpaper.*/
public static final int FLAG_LOCK = 1 << 1;

如上, WallpaperManager 此类中已经帮我们定义了两个静态常量,分别是:1——代表设置于桌面壁纸,2——代表设置于锁屏。

天真的我就以为如果要同时设置桌面壁纸与锁屏时,就连续呼叫setStream() 两次,分别带上参数1和2,结果就悲剧了,在连续呼叫setStream()时,第二次会明显比较耗时,经测试:

//第一次

11-16 14:43:18.271: W/test(22332): WallpaperManager - setStream(): completion.waitForCompletion() Begin

11-16 14:43:18.315: W/test(22332): WallpaperManager - setStream(): completion.waitForCompletion() End

......

//第二次

11-16 14:43:18.405: W/test(22332): WallpaperManager - setStream(): completion.waitForCompletion() Begin

11-16 14:43:21.468: W/test(22332): WallpaperManager - setStream(): completion.waitForCompletion() End

可以发现,执行 completion.waitForCompletion()方法时,第二次耗时明显。

一番研究后才发现,原来同时设定桌面壁纸与锁屏时,直接将标记参数设置为3就好,如下:

InputStream is = new FileInputStream(f);
if (Build.VERSION.SDK_INT >= 24) {bmp = BitmapFactory.decodeFile(f.getAbsolutePath());manager.setStream(is, new Rect(0, 0, bmp.getWidth(), bmp.getHeight()), false, WallpaperManager.FLAG_SYSTEM|WallpaperManager.FLAG_LOCK);
} else {manager.setStream(is);
}

ok,同时设置桌面壁纸与锁屏的速度明显变快了。


http://www.ppmy.cn/news/484345.html

相关文章

使用CiLocks绕过Android的锁屏功能

关于CiLocks CiLocks是一款功能强大的Android渗透测试工具&#xff0c;在该工具的帮助下&#xff0c;研究人员可以轻松绕过Android设备的锁屏保护。 功能介绍 爆破四位PIN码&#xff1b; 爆破六位PIN码&#xff1b; 使用字典爆破锁屏密码&#xff1b; 绕过锁屏保护&#xff0…

Android:获取当前的锁屏壁纸或桌面壁纸

使用WallpaperManager类 FLAG_LOCK为锁屏壁纸 FLAG_SYSTEM为桌面壁纸 //使用WallpaperManager类TargetApi(Build.VERSION_CODES.N)private Bitmap getLockWallpaper(){WallpaperManager wallpaperManager WallpaperManager.getInstance(mContext);//获取WallpaperManager实例…

银河麒麟liunux下的屏幕保护与锁屏设置

windows中有屏幕保护程序&#xff0c;在人离开的一段时间后可以开启屏幕保护&#xff0c;而且还可以设置密码&#xff0c;非常有利于短时间离开电脑时的保护隐私。 在linux中其实也有类似的功能&#xff0c;只不过一开始以为要安装termsaver什么的&#xff0c;还要用xset命令等…

linux系统之屏保与锁屏命令

linux系统之屏保与锁屏命令。 一、屏保命令。 #显示屏保但不锁定&#xff0c;移动鼠标或敲击键盘后自动消失 gnome-screensaver-command -a#显示并锁定&#xff0c;移动鼠标或敲击键盘弹出密码框 gnome-screensaver-command -l二、锁屏命令。 #列出当前所有的会话。这是默认…

直接选择排序及其稳定性分析

直接选择排序 直接选择排序是一种很直观的排序方法。其操作是这样&#xff1a;先在未排序的序列中选择最小的元素&#xff08;或最大的元素&#xff09;&#xff0c;把它与第一个元素交换&#xff0c;放在第一个位置&#xff0c;再在剩余未排序序列中选择第二小的&#xff0c;…

86墙插双联明装新款:蓝奥声智能用电设备安全防护有多强

物理绝缘和智能数据分析安全技术重塑了墙壁插座的安全标准&#xff0c;极大可能规避日常生活中的意外&#xff0c;只有做到意外情况下也不会触电&#xff0c;这样的墙壁插座才能真正叫安全墙壁插座&#xff0c;“不触电且足够安全”应该成为墙壁插座的安全标配标准。 智能物理…

MySQL 中的 CASE语句底层实现

1. 概述 CASE 表达式是 SQL 中用于条件判断的一种常用语法。它可以根据满足不同条件时需要返回的值来进行操作。在 MySQL 中&#xff0c;CASE 表达式有两种形式&#xff1a;简单 CASE 和搜索 CASE。简单 CASE 对比指定值和表达式的值进行操作&#xff0c;而搜索 CASE 则对多个…

vue3 + TS + elementplus + pinia实现后台管理系统左侧菜单联动实现 tab根据路由切换联动内容

效果图&#xff1a; home.vue页面代码 <template><el-container><el-aside width"collapse ? 200px : 70px"><el-button color"#626aef" click"collapseToggle()"><el-icon><Expand v-if"collapse"…