当前位置:   article > 正文

KeyguardManager介绍

keyguardmanager

目录

1.Manager获取方法:

2.方法详解:

3.KeyguardManager方法执行流程图:

4.KeyguardLock中方法执行流程:

5.KeyguardLock的disableKeyguard使用限制:

6.isKeyguardLocked注意项:

7.DISABLE_KEYGUARD权限的定义:


1.Manager获取方法:

  1. import android.app.KeyguardManager;
  2. KeyguardManager manager = context.getSystemService(Context.KEYGUARD_SERVICE);

2.方法详解:

  • newKeyguardLock  可以通过KeyguardLock显示锁屏和隐藏锁屏

KeyguardLock方法:

      disableKeyguard       禁用锁屏功能

      reenableKeyguard    恢复锁屏功能

      权限:Manifest.permission.DISABLE_KEYGUARD

  • isKeyguardLocked  返回点前是否处于锁屏的状态   true:锁屏   false:已解锁
  • isKeyguardSecure  是否设置了锁屏密码                  true:有锁屏密码(包含SIM卡锁) false:未设置
  • inKeyguardRestrictedInputMode 是否处于限制输入模式  true:不响应home键和右软件 false:功能正常
  • isDeviceLocked  设备是否锁定,功能类似 isKeyguardLocked  多用户接口
  • isDeviceSecure  功能类似isKeyguardSecure 多用户接口
  • requestDismissKeyguard 解锁接口   若设置了锁屏密码需要用户输入正确的密码,若未设置则可以直接解锁
  • exitKeyguardSecurely 解锁接口(无论是否设置了锁屏密码都可以解锁需要获取Manifest.permission.DISABLE_KEYGUARD权限)

3.KeyguardManager方法执行流程图:

                                               

整个执行流程方法调用很清晰,参考流程图和源代码可以快速理解,这里就不在详细解读了。只要注意一点:KeyguardService和KeyguardViewMediator这个2个属于SystemUI模块。其他的属于Framework。

4.KeyguardLock中方法执行流程:

执行流程主要区别就在于在WindowManagerService和PhoneWindwManager之间增加了Handler异步处理机制,大致流程如下:

                                               

5.KeyguardLock的disableKeyguard使用限制:

所有APP申请了权限都可以调用响应的方法禁用和恢复锁屏功能,若锁屏设置了密码,也就是说isKeyguardSecure方法返回值是true,只有系统APK的功能正常,其他APK执行不报错,但功能不好使。

  1. WindowManagerService中disableKeyguard方法中的限制:
  2. // If this isn't coming from the system then don't allow disabling the lockscreen
  3. // to bypass security.
  4. if (Binder.getCallingUid() != SYSTEM_UID && isKeyguardSecure()) {
  5. Log.d(TAG_WM, "current mode is SecurityMode, ignore disableKeyguard");
  6. return;
  7. }

6.isKeyguardLocked注意项:

在锁屏状态下调用disableKeyguard隐藏掉锁屏后,调用isKeyguardLocked方法获取的状态为true,虽然此时锁屏没有显示,正常操作也是正常的,但此时Framework的状态是处于锁屏状态的。

首先看看disableKeyguard的具体操作,具体在

/frameworks/base/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.javasetKeyguardEnabled方法中看看,

在锁屏mShowing状态为true时,禁用锁屏,会将mNeedToReshowWhenReenabled的状态置为true.

这个状态是记录禁用锁屏时,锁屏是否处于显示状态,若处于显示,恢复锁屏功能时,要将锁屏显示出来。

在调用isKeyguardLocked方法时最终会调用到KeyguardViewMediator.javaisInputRestricted方法中

最终这个mNeedToReshowWhenReenabled状态就会影响isKeyguardLocked的结果。

7.DISABLE_KEYGUARD权限的定义:

level级别是最低的normal级别,也就所所有的应用都可以申请这个权限。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/619639
推荐阅读
相关标签
  

闽ICP备14008679号