KeyguardViewMediator KeyguardManager

深入解析Android锁屏机制与KeyguardManager使用
本文详细解读了Android系统中用于管理锁屏界面的KeyguardViewMediator角色及其工作流程,同时介绍了如何通过KeyguardManager API来控制和查询锁屏状态。从系统启动到安全退出锁屏过程,本文全面覆盖了锁屏控制的核心概念和技术细节。

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

扩展阅读:

Android框架浅析之锁屏(Keyguard)机制原理

自动解锁 KeyguardManager

Android锁屏控制

android4.0.4系统里去掉锁屏和休眠

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值