失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Android WallpaperManager 同时设置桌面壁纸与锁屏的问题

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

时间:2023-06-18 19:58:26

相关推荐

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

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

大家都知道使用 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-1614:43:18.271: W/test(22332): WallpaperManager - setStream(): completion.waitForCompletion() Begin

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

......

//第二次

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

11-1614: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,同时设置桌面壁纸与锁屏的速度明显变快了。

如果觉得《Android WallpaperManager 同时设置桌面壁纸与锁屏的问题》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。