赞
踩
目录
5.KeyguardLock的disableKeyguard使用限制:
- import android.app.KeyguardManager;
-
- KeyguardManager manager = context.getSystemService(Context.KEYGUARD_SERVICE);
KeyguardLock方法:
disableKeyguard 禁用锁屏功能
reenableKeyguard 恢复锁屏功能
权限:Manifest.permission.DISABLE_KEYGUARD
整个执行流程方法调用很清晰,参考流程图和源代码可以快速理解,这里就不在详细解读了。只要注意一点:KeyguardService和KeyguardViewMediator这个2个属于SystemUI模块。其他的属于Framework。
执行流程主要区别就在于在WindowManagerService和PhoneWindwManager之间增加了Handler异步处理机制,大致流程如下:
所有APP申请了权限都可以调用响应的方法禁用和恢复锁屏功能,若锁屏设置了密码,也就是说isKeyguardSecure方法返回值是true,只有系统APK的功能正常,其他APK执行不报错,但功能不好使。
- WindowManagerService中disableKeyguard方法中的限制:
-
- // If this isn't coming from the system then don't allow disabling the lockscreen
- // to bypass security.
- if (Binder.getCallingUid() != SYSTEM_UID && isKeyguardSecure()) {
- Log.d(TAG_WM, "current mode is SecurityMode, ignore disableKeyguard");
- return;
- }
在锁屏状态下调用disableKeyguard隐藏掉锁屏后,调用isKeyguardLocked方法获取的状态为true,虽然此时锁屏没有显示,正常操作也是正常的,但此时Framework的状态是处于锁屏状态的。
首先看看disableKeyguard的具体操作,具体在
/frameworks/base/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java的 setKeyguardEnabled方法中看看,
在锁屏mShowing状态为true时,禁用锁屏,会将mNeedToReshowWhenReenabled的状态置为true.
这个状态是记录禁用锁屏时,锁屏是否处于显示状态,若处于显示,恢复锁屏功能时,要将锁屏显示出来。
在调用isKeyguardLocked方法时最终会调用到KeyguardViewMediator.java的isInputRestricted方法中
最终这个mNeedToReshowWhenReenabled状态就会影响isKeyguardLocked的结果。
level级别是最低的normal级别,也就所所有的应用都可以申请这个权限。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。