android屏幕解锁新解

最近因为一些事接触到android屏幕解锁这块,刚开始查询网上资料,绝大部分以keyguardLock 来进行获取屏幕锁和接触屏幕锁,其思路如下:

// KeyguardManager keyguardManager = (KeyguardManager)getSystemService(KEYGUARD_SERVICE); 
// KeyguardLock keyguardLock = keyguardManager.newKeyguardLock("glapp");
// keyguardLock.disableKeyguard();

获取当前屏幕锁并解锁;

// KeyguardManager keyguardManager = (KeyguardManager)getSystemService(KEYGUARD_SERVICE); 
// KeyguardLock keyguardLock = keyguardManager.newKeyguardLock("glapp");
// keyguardLock.reenableKeyguard();

然后在相应位置 释放持有的屏幕锁


但是这个思路带一个吻,在最后哦一次退出应用的时候由于释放的屏幕锁被系统回收,系统会再次锁屏,造成不好的用户体验,

经过翻阅api,发现有一个更好的解决方式:

在window对象中,存在这样一个flags :WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD

位于 package android.view.WindowManager中。

其注释如下:

        /** Window flag: when set the window will cause the keyguard to
         * be dismissed, only if it is not a secure lock keyguard.  Because such
         * a keyguard is not needed for security, it will never re-appear if
         * the user navigates to another window (in contrast to
         * {@link #FLAG_SHOW_WHEN_LOCKED}, which will only temporarily
         * hide both secure and non-secure keyguards but ensure they reappear
         * when the user moves to another UI that doesn't hide them).
         * If the keyguard is currently active and is secure (requires an
         * unlock pattern) than the user will still need to confirm it before
         * seeing this window, unless {@link #FLAG_SHOW_WHEN_LOCKED} has
         * also been set.
         */
        public static final int FLAG_DISMISS_KEYGUARD = 0x00400000;

其大意为:

窗口 标志  当键盘锁安全的的时候(即基本的屏幕锁) 设置该flags后 窗口显示 导致 键盘锁被解锁 因为 这种 键盘锁 需要 用于 安全 如果用户导航另一个窗口, 它(键盘锁) 永远不会 重新出现 相对 {@link   #FLAG_SHOW_WHEN_LOCKED}, 暂时 隐藏 安全 非安全 的  keyguards 但r如果系统 确保 用户 另一个 用户界面(即不在这个应用中) 并不设置 他们显示方式 时候 它们(键盘锁) 又会出现(即键盘锁又恢复到了原来的正常状态而不是被获取释放等等) )。 如果 键盘锁 当前 处于活动状态 并且 安全 的  (比如手势 屏幕解锁 图案)   用户在看到自己的界面前仍然 需要进行解锁 除非用户 设置 了  {@link   #FLAG_SHOW_WHEN_LOCKED}

So 用法如下 在你的oncreate()方法中,在你setContentView之前
你只需要为 window 添加相应flags:
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON|WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
setContentView(R.layout.lockscreen);
即可大功告成!


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值