KeyguardViewMediator是整个待机解/锁屏业务的调度器,负责调度锁屏界面的相关动作及查询解锁屏状态
它在PhoneWindowManager初始 化时被创建,并运行在它的线程上,锁屏的UI界面也是在这个线程上创建及显示的。KeyguardViewMediator类提供的状态查询api可以被 诸如com.android.server.wm.WindowManagerService、com.android.server.PowerManagerService等线程调用,所 以,KeyguardViewMediator类上的这些api方法都是线程同步的(synchronized)。
开机启动时,首先执行PhoneWindowManager.systemReady(),调用KeyguardViewMediator.onSystemReady()进行待机锁屏及解锁逻辑。
它在framework层,只有在PowerManagerService.java中被调用过,以便获得Keyguard状态。
而其它的,包括app层,都是通过KeyguardManager,来获得Keyguard状态。
KeyguardManager通过PhoneWindowManager来调用KeyguardViewMediator中的方法。
/**
* Class that can be used to lock and unlock the keyboard. Get an instance of this
* class by calling {@link android.content.Context#getSystemService(java.lang.String)}
* with argument {@link android.content.Context#KEYGUARD_SERVICE}. The
* Actual class to control the keyboard locking is
* {@link android.app.KeyguardManager.KeyguardLock}.
*/
public class KeyguardManager {
private IWindowManager mWM;
KeyguardManager() {
mWM = IWindowManager.Stub.asInterface(ServiceManager.getService(Context.WINDOW_SERVICE));
}
这里的mWM就是得到的WindowManagerService,它继承自IWindowManager.Stub。
KeyguardManager有以下方法,它们分别调用了WindowManagerService中的方法。
exitKeyguardSecurely用于退出锁屏,SDK不建议使用,而建议使用进行FLAG_DISMISS_KEYGUARD和FLAG_SHOW_WHEN_LOCKED替代。
KeyguardManager.KeyguardLock 用于禁用和启用锁屏,SDK不建议使用。
inKeyguardRestrictedInputMode()用于判断是否处于锁屏状态
public void exitKeyguardSecurely(final OnKeyguardExitResult callback) {
try {
mWM.exitKeyguardSecurely(new IOnKeyguardExitResult.Stub() {
public void onKeyguardExitResult(boolean success) throws RemoteException {
callback.onKeyguardExitResult(success);
}
});
} catch (RemoteException e) {
}
}
参考:http://quanminchaoren.iteye.com/blog/991035
扩展阅读: