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

大家都知道使用 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,同时设置桌面壁纸与锁屏的速度明显变快了。

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

  1. Launcher中修改桌面壁纸、锁屏壁纸和手机图标

    Launcher中增加主题的更换(图标.壁纸和锁屏壁纸)–2 1.整体思路 1.1.桌面长按弹出小控件,加上一个切换主题的按钮 1.2.在主题控制界面布局主题切换按钮 1.3.将准备好的图标资源加载进 ...

  2. 给虚拟机更换桌面壁纸和锁屏界面

    前言:虚拟机及系统的安装请移步博客 点我查看 虚拟机默认的界面是什么样的呢? 你看这平淡无奇的桌面与锁屏-- 你看这小气的分辨率-- 还不如把桌面和锁屏换成自己喜欢的图片,说干就干 1.先改一下分辨率 ...

  3. Win10桌面壁纸、锁屏壁纸保存位置

    当前桌面壁纸的保存位置 %AppData%\Microsoft\Windows\Themes\CachedFiles 如果你指的是操作系统自带的壁纸那么在 C:\windows\web下 锁屏壁纸位置 ...

  4. win10自带的桌面壁纸和锁屏推荐壁纸在哪个文件夹?

    Windows聚焦壁纸: C:\Users\你的用户名\AppData\Local\Packages\Microsoft.Windows.ContentDeliveryManager_cw5n1h2t ...

  5. android桌面壁纸显示不全屏显示,手机壁纸怎么全屏 全屏显示手机壁纸方法

    使用安卓手机的朋友都知道,安卓手机更换的壁纸是一个比较大的壁纸,对于一张背景壁纸图片我们手机界面看到的只有一部分,只有通过左右划屏才可以变换的看完整张桌面背面图片,那么如何在手机界面中看到一个完整的桌 ...

  6. win7没有个性化如何把计算机放到桌面,win7系统家庭版右键没有个性化设置桌面壁纸...

    很多朋友的电脑是win7系统家庭版的,想要给电脑桌面的壁纸更换,就会发现电脑右键没有个性化选项,那么如何把个性化选项给设置出来呢?其实很好解决,下面就由小编带你解决win7右键没有个性化设置桌面壁纸的 ...

  7. 计算机桌面图片怎么设置大小,怎么设置桌面壁纸大小

    很多人都知道怎麽设置电脑桌面,可真正找到适合自己屏幕的可能很少,图片或大或小,小编为大家分享了设置桌面壁纸大小的方法,下面大家跟着小编一起来了解一下吧. 设置桌面壁纸大小方法 先查看自己电脑屏幕分辨率 ...

  8. C语言实现设置桌面壁纸

    关键代码: SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, "C:\\Users\\star-dream\\Pictures\\Saved Pic ...

  9. c++编程 设置桌面壁纸以及设置壁纸失效的解决办法

    c++编程 设置桌面壁纸以及设置壁纸失效的解决办法 最近项目中需要一个小工具来设置桌面壁纸,于是想自己尝试用c++写一个. 刚开始,发现COM组件IActiveDesktop 可以设置壁纸.代码如下: ...

  10. C++ 设置桌面壁纸

    定义一个函数来实现主要的功能: HRESULT SetDesktopWallpaper(PWSTR pszFile, WallpaperStyle style); WallpaperStyle是一个枚 ...

最新文章

  1. OpenvSwitch — ovs-db 数据库
  2. 以太坊(Ethereum ETH)的奖励机制
  3. html range关联文本框,HTML5gt;meter标签与input(type=range)标签结合制作简易范围指示器...
  4. SAP C4C Adapt menu debugging
  5. HTML5 保存画布
  6. 图片轮播插件-carouFredSel
  7. [转载] 机器学习篇—Numpy数值计算基础(中)
  8. Rust: 镜像设置要注意影响效果
  9. c语言 画图软件哪个好,电脑画图软件推荐
  10. FPGA基础知识21(PL控制PS端DDR的设计)
  11. win7系统计算机怎么排列图标,Win7系统桌面图标的三种排序方式
  12. 项目管理10大知识领域和47个过程的思维导图
  13. 命令行压缩工具7z.exe使用详解
  14. ##Mysql数据库DQL查询工具的使用
  15. 树莓派 Raspberry 4B 刷机、上网、录音外设、文件传输、电脑投屏问题汇总
  16. 比亚迪芯片BF7615BMxx芯片怎么烧录
  17. 混合高斯模型(matlab)
  18. Redis 全实践(超长文预警)
  19. 谷雪梅 Google中国
  20. 在微信小程序中如何引入iconfont

热门文章

  1. MyBatis学习(一)
  2. Python基础之模块(Module)和包(Package)
  3. 150. 逆波兰表达式求值(中等 栈 数组)
  4. 课程设计---族谱管理系统(c++)
  5. 立陶宛央行抢跑数字货币背后:前瞻的区块链战略 中国已有企业布局
  6. 0016_光源和打光(1)
  7. 国外广告联盟:玩转国外CPC网站作弊
  8. 苹果手机电池保养再用两年!
  9. DOORS和Reqtify — 需求管理和需求追溯工具
  10. SH-SSS丨CUSIDE:分块、模拟未来、解码的流式语音识别新框架