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

  最近终于成功的摆脱了FM收音机,迈向了新的模块:锁屏、状态栏、Launcher---姑且称之为“IDLE”小组,或许叫手机

 美容小组,要是能施展下周星星同学的还我漂漂拳,岂不快哉。 OK,闲话打住,咱开始正文。

    

      本文主要内容:


          1、分析锁屏界面的组成 ;

          2、基于源代码分析锁屏相关类 ;

          3、提出一种在框架取消锁屏的方法 。

 

      花了一些时间研究Android原生的锁屏框架---Keyguard,今天就慢慢的讲解下我自己对这个模块的总结,因为目前还处于

  理论学习的状况,很多细节以及功能上的实现有待后续的补充完整。

 

     本文分析适合Android2.2和2.3版本,Android4.0尚不清楚。整个锁屏源码基本上完全一样,只是改变了文件存放路径而已。

     本文分析版本具体是Android2.3版本。


     源文件路径主要有两个:

             frameworks\base\policy\src\com\android\internal\policy\impl\   ---->锁屏框架

             frameworks\base\core\java\com\android\internal\widget\          ----> 提供了一些的自定义View.


  一、锁屏界面的组成


       通常 Android手机上大家常见的界面只有一种,成功后即可解锁进入界面了。其实在Android手机中,正常的锁屏界面由

 两种不同性质的界面组成:


    第一种界面称之为LockScreen界面(为了叙述方便,我们姑且称为“解锁界面),即我们通常所见到的界面,手机厂商一般定制

          该界面。界面如下所示:

                                                 


          该界面对应自定义View的是LockScreen.java类

           路径位于:frameworks\policies\base\phone\com\android\internal\policy\impl\LockScreen.java

               

   第二种界面称之为UnLockScreen(为了后文叙述方便,我们姑且称为“开锁界面”),一般由Android源码提供,有如下四种

             ①、图案开锁界面 ---- PatternUnlockScreen.java类     (自定义LinearLayout)

                      路径位于:frameworks\policies\base\phone\com\android\internal\policy\impl\PatternUnlockScreen.java

                      界面显示为:

                                                        


             ②、PIN开锁界面 ---- SimUnlockScreen.java 类           (自定义LinearLayout)

                      路径位于:frameworks\policies\base\phone\com\android\internal\policy\impl\SimUnlockScreen.java

                      界面显示为:   (图片省略)

                                             

             ③、密码开锁界面 ---- PasswordUnlockScreen.java类   (自定义LinearLayout)

                      路径位于:frameworks\policies\base\phone\com\android\internal\policy\impl\PasswordUnlockScreen.java

                      界面显示为:

                                              


             ④、GoogleAccount 开锁界面 ,即Google账户开锁界面。一般用于当用户输入密码错误次数超过上限值时,系统会提示

       你输入Google账户去开锁。注意:开启它需要你手动设置账户与同步,否则该界面是不会出来的。

                    对应的源文件是: AccountUnlockScreen.java类    (自定义LinearLayout)

                    路径位于:frameworks\policies\base\phone\com\android\internal\policy\impl\AccountUnlockScreen.java   

                    界面显示为:

                                                              


    可以按照如下办法选择开启哪一种开锁界面: 设置—>位置和安全—>设置屏幕锁定  ,具体选择那种开锁界面。

 

    显示规则

         当然,这两种界面的组合也是有很多变化的,总的规则如下:

            首先显示LockScreen界面,接着判断是否开启了UnLockScreen界面,如果设置了UnLockScreen界面,则进入对应的

    UnLockScreen界面去解锁,才算成功解锁。但,存在一种特殊的情况,就是假如我们选择了图案  UnLockScreen界面,是不会

    显示LockScreen界面,而只会显示UnLockScreen界面。

 

   二、锁屏界面的实现


       我们知道, 任何一种界面都是由各种View/ViewGroup(当然包括自定义的)组成的,然后根据系统对应的状态值的改变去更新

  这些View的显示状态,锁屏界面自然也是如此。锁屏界面的实现最顶层是采用了FrameLayout去控制的,当然内部也嵌套了很

  多层,内嵌层数的增多的一点好处就是我们可以分开而治,具体针对每层去做相应的更新。难处就是看代码看的很蛋疼。


       当界面复杂时,我不得不提Google为开发人员提供的一款优秀工具了---Hierarchy Viewer ,通过它,我们很清晰的弄明白整

  个View树的继承层次,一个布局结构,当然,看源代码也是必须的。

       关于Hierarchy Viewer的使用请参考该博客:

               《Android 实用工具Hierarchy Viewer实


       整个锁屏界面的继承层次如下(部分以及设置了图案开锁界面),更加完整的图请使用Hierarchy Viewer 工具查看。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值