android屏幕解锁新思路

最近接了个私活,涉及到屏幕解锁,由于从来没接触过这块方面的知识,网上找了很多相关的内容,基本上都是以

private PowerManager.WakeLock wl;

private KeyguardManager keyguardManager;

public static KeyguardLock keyguardLock;

   wl = powerManger.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.SCREEN_DIM_WAKE_LOCK, "bright");
   keyguardManager = (KeyguardManager)getSystemService(KEYGUARD_SERVICE); 
   keyguardLock = keyguardManager.newKeyguardLock("");

          keyguardLock.disableKeyguard();


         keyguardLock.reenableKeyguard();


拿到屏幕锁持有并清除,再释放为主。

但是这个思路有个缺点就是在你退出应用后,,系统会拿到你释放的屏幕锁并重新锁住屏幕,这就造成了不好的用户体验。


经过翻阅相关API 发现一个很有用的参数 :

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;

大意为 这个窗口标志位 设置窗口导致键盘锁在屏幕唤醒后解锁,这种用法只有安全键盘锁(即非键盘输入或者手势解锁等等)因为这种键盘锁需要用于安全它(键盘锁永远不会重新出现如果用户导航另一个窗口相对于 FLAG_SHOW_WHEN_LOCKED暂时隐藏安全非安全的 keyguards确保用户另一个用户界面并不掩饰他们时候它们又会出现)。如果键盘锁当前处于活动状态并且安全的 (需要屏幕解锁图案) 用户仍然会看到解锁的窗口除非设置了 FLAG_SHOW_WHEN_LOCKED

也就是说在android的基本锁屏中我们是可以利用这个特性进行屏幕解锁的。

在代码中的使用为:

在 oncreate()方法中,在你setContentView之前,

添加windows 的flags如下:

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON|WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD|WindowManager.LayoutParams.FLAG_FULLSCREEN);

setContentView(R.layout.lockscreen);

即可在唤醒屏幕的同时将屏幕锁解开而且无后患。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值