Keyguard:即Android 中处理锁屏(电源键按下、屏幕显示时间超时)、解锁(滑动、图案、指纹、声音、人脸、虹膜等)、锁屏下显示通知管理者。
闲言少叙来看一下涉及Keyguard的部分:
1、SystemUI
\frameworks\base\packages\SystemUI
2、Keyguard
\frameworks\base\packages\Keyguard
3、\frameworks\base\services\core\java\com\android\server\policy
一些重要文件大意:
PhoneWindowManger:管理系统的准备工作等
KeyguardViewMediator:涉及到keyguard的协调请求,包含了关于keyguard的状态、电源管理事件是否影响keyguard当被展示或者重启,回调手机窗口管理器通知其什么时候展示,从keyguard视图事件本身叙述这个keyguard成功解锁等问题。
KeyguardService:继承自Service,处理Keyguard的系统服务。
StatusBarKeyuardViewManger:管理、创建、显示、隐藏和重置状态栏中的Keyguard。
KeyguardBouncer:用于管理锁屏的措施。
画的序列图实在“”吃藕“”,借鉴一下前人的锁屏流程时序图:
直接从framework的锁屏入口阅读代码;
KeyguardService.java
/frameworks/base/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardService.java
public void onSystemReady() {
checkPermission();//避免死锁并检查系统权限
mKeyguardViewMediator.onSystemReady();//进入锁屏入口
}
KeyguardViewMediator.java
/frameworks/base/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
public void onSystemReady() {
mSearchManager = (SearchManager) mContext.getSystemService(Context.SEARCH_SERVICE);
synchronized (this) {
if (DEBUG) Log.d(TAG, "onSystemReady");
AntiTheftManager.checkPplStatus();//检查手机是否加密(是否加了手机隐私锁)
mSystemReady = true;
doKeyguardLocked(null);// 进行锁屏预处理判断等操作
mUpdateMonitor.registerCallback(mUpdateCallback);
mPowerOffAlarmManager.onSystemReady();
}
// Most services aren't available until the system reaches the ready state, so we
// send it here when the device first boots.
maybeSendUserPresentBroadcast();
}