注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

东东的博客

江南烟雨,同大家一起分享

 
 
 

日志

 
 

Android锁屏与解屏相关代码分析  

2010-12-21 09:55:11|  分类: android相关 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
 
      我觉得对于普通人来说,最常见的是Android解屏的界面,然后应该是Home界面。今天就来分析一下解屏界面的相关代码(以索爱的解锁界面为例)。
      首先看解屏的界面,我把解屏的界面分为两个部分,最上部是status Bar,下面是LockScreenSemc,在LockScreenSemc上有一个可供滑动解锁的界面,每个界面对应的类如图所示。
Android锁屏与解屏相关代码分析   

Android锁屏与解屏相关代码分析

两个类所在包:
com.android.internal.policy.impl.LockScreenSemc.java
com.android.internal.widget.SlidingTabSemc.java


SlidingTabSemc.java分析:
分析我们的Touch在 SlidingTabSemc 上产生的效果,主要看onTouchEvent ()的处理。

   ACTION_DOWN 时会调用disableButtonPress(),产生手指点击时的动画效果。
   ACTION_MOVE 时会调用moveControl()产生图片跟随手指移动的效果。
   ACTION_UP   时会判断移动的位置是否已经到了,可以触发Trigger的程度,如果到了,则调用   dispatchTriggerEvent,通知在 SlidingTabSemc上的Trigger Listener。由于 SlidingTabSemc上的 Trigger Listener是在  LockScreenSemc里实现的,所以会代用到 LockScreenSemc中。

LockScreenSemc.java分析:

代码中有一行:  private SlidingTabSemc mSelector; 将SlidingTabSemc 作为它的一个属性值,
另外此类实现了SlidingTabSemc.OnTriggerListener。这个listener用来执行我们从左到右或者从右到左的滑动,在构造函数中有mSelector.setOnTriggerListener(this);这样我们在 SlidingTabSemc上的滑动会调用到 public void onTrigger(View v, int whichHandle)方法中。

    onTrigger的执行为两个分支,一个为从右滑向左,执行了mAudioManager.setRingerMode(),设置了声音的模式,并更新 右边声音的图片。另一个为从左滑向右,执行的是mCallback.goToUnlockScreen();这个mCallback是何方神圣呢?它是 KeyguardScreenCallback类型,并且在LockScreenSemc初始化的时候传进来的,跟踪后我们发 现,LockScreenSemc是类LockPatternKeyguardView的一个属性值(private View mLockScreen);KeyguardScreenCallback的实现在LockPatternKeyguardView中。

   LockPatternKeyguardView中LockPatternKeyguardView的逻辑是,如果用户在设置->位置和安全 ->设置屏幕锁定中设置了解锁画面,则调用了updateScreen(Mode.UnlockScreen)进入相应的解锁画面,否则调 用:getCallback().keyguardDone(true); 这个getCallback() 返回的是KeyguardViewMediator。

KeyguardViewMediator 中 keyguardDone()方法,最终会给Handler发送KEYGUARD_DONE 的消息,Handler会执行handleKeyguardDone()方法,在方法中会调用handleHide(),这个函数会将我们的LockScreenSemc给隐藏。

总结:总体来说,上面提到的类基本上可以这么认为,SlidingTabSemc属于LockScreenSemc,LockScreenSemc属于 LockPatternKeyguardView, LockPatternKeyguardView 属于KeyguardViewManager,KeyguardViewManager来统管所有与锁解屏相关的操作,另外通过 KeyguardViewMediator,来实现KeyguardViewManager和PhoneWindowManager之间的交互与通信,如 图所示:
Android锁屏与解屏相关代码分析

画面的更新实现
    画面更新是由com.android.internal.policy.impl.KeyguardUpdateMonitor 来实现的。它注册锁屏Receive 用于接受各种Intent(例如:时间,电池,Sim状态,电话状态),来处理Lock界面上的信息的更新。

转自:http://blog.sina.com.cn/s/blog_6e15a6010100mysh.html
  评论这张
 
阅读(9585)| 评论(3)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017