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

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值