Android 4.0 的锁屏类功能简介

来源:互联网 发布:怎么卖淘宝充值卡 编辑:程序博客网 时间:2024/05/19 08:37

                                                        Android 4.0 的锁屏类功能简介

 

Android4的锁屏逻辑代码在/frameworks/base/policy/src/com/android/internal/policy/impl中,废话不多说。

 

1.KeyguardUpdateMonitor.java

 

锁屏更新监视器,该类的主要功能就是根据监视系统状态值的改变(例如:时间、SIM卡状态、电池电量;使用广播监听),根据这种状态值的改变回调监听了该状态信息的对象实例。当其接收到状态改变的广播之后会通知KeyguardStatusViewManager修改界面上显示的状态。


2.KeyguardViewManager.java

 

锁屏视图管理,包装了WindowManager功能了,提供了添加、删除锁屏界面的功能。

 

3.KeyguardViewMediator.java

 

核心类 ,功能强大。功能:禁止锁屏、检查锁屏、是否显示锁屏view、按电源键之后就是通过该类处理锁屏事件的。

由PhoneWindowManager去访问控制Keyguard。该类的初始化是在PolicyWindowManager的构造函数中创建的。这个类是最重要的一个类,多看看这个类才会对锁屏流程的理解更深入。

 

4.KeyguardViewProperties.java

 

锁屏属性,提供了创建界面的通用方法。

 

5.KeyguardWindowController.java

 

键盘锁窗体控制者,提供通用接口,判断该界面是否需要显示输入法窗口。

 

6.LockPatternKeyguardView.java

 

这个类完成锁屏模式的选择已及锁屏view的创建,每次解锁完成后都会调用goToLockScreen或者goToUnlockScreen方法检查是否改变了锁屏模式。4中锁屏的实例就是在选择锁屏模式完成之后常见的。内部类FastBitmapDrawable用来把壁纸放在锁屏view的背景上。

7.LockPatternKeyguardViewProperties.java

 

几十行代码。。。。

8.LockScreen.java

 

锁屏界面。锁屏界面其实可以分为两个部分,一个是解锁图案的,也就是MultiWaveView,自定义的波纹解锁图案,还有一个是包括时钟、日期、连接充电、运营商等的状态显示界面。4.0以后的android对锁屏做了更好的功能分割及封装。优点如下:

(1)  解锁图案和状态信息分离,更改锁屏样式就变得很简单。锁屏的动画、拖拽移动放在view里面,解锁判断放在lockscreen力啊民

(2)  分离出去的锁屏view和lockscreen分工更精细,在lockscreen增加接口实现view中的功能

实际上,pin码、密码、图案、默认的波纹解锁,由于分工更精细,已经把共同的状态信息抽离出来放在KeyguardStatusUpdateMediator中完成,而不必在每种锁屏中重复相同的动作。

lockscreen的精细分工需要研究这个类来仔细体会。

 

9.PasswordUnlockScreen.java

 

密码解锁界面,这段很简单就不说了。

 

10.PatternUnlockScreen.java

 

显示9个圆圈的图形解锁界面。和Lockscreen一样,它是整个锁屏view,九个圆圈的view实现是在自定义的LockPatternView中完成的的。

 

11.PhoneFallbackEventHandler.java

 

和PhoneWindow有相同的按键处理代码,以防手机没有设置一些按键。

12.PhoneLayoutInflater.java

 

几十行代码,主要覆写onCreateView()方法。

 

13.PhoneWindow.java

 

PhoneWindowWindow类的派生类,是Android中的最基本的窗口系统,有getKeyguardManager()方法和内部类DecorView。menu、back、search等key的处理也是在这个类里面

 

 14.PhoneWindowManager.java

 

手机窗体管理。phoneWindowManager.java可以派发各种物理key,如PowerHomeVol+Vol-等等,长按power显示GlobalAction、长按home键显示近期任务表等等。这个类还会监听settings、感应器、屏幕旋转。持有KeyguardViewMediator的实例,在系统启动ready之后,在systemReady()中通知锁屏,锁屏的流程是从这里开始的。有个launchHomeFromHotKey()方法,如果锁屏受到限制,会首先在这个方法里KeyguardViewMediator的实例调用verifyUnlock()方法。

 

15.AccountUnlockScreen.java

 

当用户忘记他们密码的时候就会调用这个函数使用他们的帐号密码解锁并且重置手机锁,这里面代码很简单就不细说了。最终判断成功的方法为:postOnCheckPasswordResult();

 

16.BiometricSensorUnlock.java

 

生物识别传感器解锁?不知道怎么翻译,这是一个接口,从名字上分析感觉是为了面部解锁/指纹解锁或其他跟生物体有关的解锁方式预留的一个接口。

 

17.FaceUnlock.java

 

面部解锁, 其中有个布尔变量叫mServiceRunning,说是为了判断一个Service是否正在运行的。现在还不知道Service是什么Service,可能是解锁模块后台跑的主Service.代码看到后面发现在start()的时候会绑定一个叫IFaceLockInterface的Service.IFaceLockInterface是一个aidl文件,我不知道这意味着什么,可能是底层C/C++实现的一个Service?这个文件里面大部分都是关于FaceUnlock View的逻辑处理,什么显示消失阿,并没有看到面部解锁的原理,不知道跑哪里去了,很可能在那个Service中。但是那个Service是在哪里呢?大大指导一下。

 

18.GlobalActions.java

 

全局行为,这段代码就是处理锁屏界面长按Power键弹出的Dialog。关于静音模式/飞行模式和关机的。

 

19.IconUtilities.java

 

图标工具,好像就是一个图片处理的工具类,提供了一个drawable转bitmap的方法,还有个绘制bitmap按下的方法

 

20.KeyguardScreen.java

 

键盘锁接口.

 

21.KeyguardScreenCallback.java

 

键盘锁界面回调.

 

22.KeyguardStatusViewManager.java

 

键盘锁状态视图管理,SIM卡状态/电池状态/闹铃/时钟等等的管理


调用流程如下:

 

 


原创粉丝点击