Android 解锁屏启动过程
一. 开机启动
在开机过程中无线模块初始化时获取SIM卡,状态。在初始化完成后调用vm.systemReady()函数通知进入相应的Lock Screen进行解锁。
1. 在hardware/ril/reference-ril/reference-ril.c中:
通过 setRadioState (RADIO_STATE_SIM_NOT_READY) 来触发对无线模块的初始化。
通过 static void onRadioPowerOn() 对无线模块初始化。
首先通过pollSIMState(Null):轮询sim卡状态。
由getSIMStatus()函数获取sim卡状态。
2. 当系统初始化完成后 会调用wm.systemReady()函数,触发解锁界面。
VM:WindowManagerService wm = null;
由于WM为空,调用WindowManagerService中函数:
public void systemReady () {
mPolicy.systemReady();
}
mPolicy: final WindowManagerPolicy mPolicy = PolicyManager.makeNewWindowManager();
(以下文件在frameworks/policies/base/phone/com/android/internal/policy/impl中)
3. PolicyManager.makeNewWindowManager(),调用文件 PolicyManagerer.java中函数:
public static WindowManagerPolicy makeNewWindowManager() {
return sPolicy.makeNewWindowManager();
}
4. sPolicy.makeNewWindowManager 调用的是文件 Policy.java中函数:
public PhoneWindowManager makeNewWindowManager() {
return new PhoneWindowManagerwv
}
5. PhoneWindowManager 继承自 WindowManagerPolicy
mPolicy.systemReady() 最终调用的是文件 PhoneWindowManager.java 中的函数:
public void systemReady();
mKeyguardMediator.onSystemReady();
doKeyguard();
showLocked();
Message msg = mHandler.obtainMessage(Show);
mHandler.sendMessage(msg);
发送SHOW消息。
6. public void handleMessage(Message msg) 对 SHOW 消息进行了处理。
如果 msg.what 等于 SHOW 那么执行:
handleShow();
private void handleShow()
...
mCallback.onKeyguardShow();
mKeyguardViewManag.show()
7. mKeyguardViewManager.show() 调用的是文件 KeyguardViewManager.java 中的函数:
public synchronized void show()
...
mKeyguardView = mKeyguardViewProperties.createKeyguardView( mContext, mUpdateMonitor, this);
...
8. mKeyguardViewProperties.createKeyguardView
调用的是文件 LockPatternKeyguardViewProperties.java中的函数:
public KeyguardViewBase createKeyguardView(Context context,
KeyguardUpdateMonitor updateMonitor,
KeyguardWindowController controller) {
return new LockPatternKeyguardView(context, updateMonitor,
mLockPatternUtils, controller);
}
9. new LockPatternKeyguardView 调用了类 LockPatternKeyguardView 的构造函数:
public LockPatternKeyguardView(
Context context,
KeyguardUpdateMonitor updateMonitor,
LockPatternUtils lockPatternUtils,
KeyguardWindowController controller)
...
mLockScreen = createLockScreen();
addView(mLockScreen);
final UnlockMode unlockMode = getUnlockMode();
mUnlockScreen = createUnlockScreenFor(unlockMode);
mUnlockScreenMode =unlockMode;
addView(mUnlockScreen);
updateScreen(mMode);
其中getUnlockMode 获得锁类型,通常有三种:
enum UnlockMode {
Pattern,
SinPIN,
Account
}
createUnlockScreenFor(unlockMode)根据相应的unlockMode而调用对应的解锁屏。
二. 按红键启动
点击结束通话键(红键),根据action:
TelephonyManager.ACTION_PHONE_STATE_CHANGE和TelephonyManager.EXTRA_STATE_IDLE
调用frameworks/policies/base/phone/com/android/internal/policy/impl/
KeyguardViewMediator.java中函数:
doKeyguard();
private void showLocked() {
if (DEBUG) Log.d(TAG, "showLocked");
// ensure we stay awake until we are finished displaying the keyguard
mShowKeyguardWakeLock.acquire();
Message msg = mHandler.obtainMessage(SHOW);
mHandler.sendMessage(msg);
}
发送SHOW消息。
之后转到“开机启动”的第六步。
三. 其它方式
1. SIM卡状态改变,当sim卡状态为ABSENT
// only force lock screen in case of missing sim if user hasn't gone through setup wizard
当sim卡状态为 PUK_REQUIRED :即输入PIN失败。(调用PUK解锁屏)
2. 设置的自动锁屏时间out
都是通过KeyguardViewMediator.java启动。
分享到:
相关推荐
总的来说,Android 的解锁屏过程涉及到多个组件和层次的交互,从硬件初始化到软件层面的用户界面展示,整个流程复杂而精细。这个过程确保了用户在设备启动后能够安全、流畅地解锁设备并进入主屏幕。理解这一过程对于...
本文将深入探讨Android 10.0版本的锁屏启动流程,包括锁屏的启动、灭屏上锁以及亮屏解锁的逻辑。这对于SystemUI的初学者来说是非常有价值的学习内容,能帮助他们快速理解和掌握锁屏模块的开发。 首先,让我们从锁屏...
这个“HTML5 Android手机屏幕解锁模拟器代码”是一个基于HTML5技术实现的项目,它允许用户通过浏览器模拟Android手机的屏幕解锁过程。这种模拟器对于开发者测试移动应用的解锁功能,或者进行教学演示非常有用。 在...
在Android启动过程中,解锁界面的展现遵循以下步骤: 1. 系统启动后执行到`PhoneWindowManager.systemReady()`。 2. `KeyguardViewMediator.onSystemReady()`被调用来处理待机锁屏及解锁逻辑。 3. `...
在Android系统中,图案解锁是一种常见的用户验证方式,它提供了直观且相对安全的屏幕锁定机制。这个"Android 图案解锁之九宫解锁源码.zip"压缩包包含了一份实现这一功能的源代码,对于想要深入理解Android开发或者...
在Android开发中,九宫格解锁是一种常见的用户交互方式,尤其在早期的手机安全系统或者应用启动时较为流行。这个“Android九宫格解锁demo”是针对微众银行的解锁界面进行的一种模仿实现,旨在帮助开发者理解如何创建...
为了实现自动解锁,首先需要在AndroidManifest.xml文件中声明相应的权限,例如`android.permission.WAKE_LOCK`用于保持CPU运行不休眠,以及可能的`android.permission.DISABLE_KEYGUARD`来禁用屏幕锁。 2. **唤醒锁...
**二、Android解锁** 解锁在Android中可以有多种含义,这里我们讨论的是屏幕解锁和应用内的权限解锁。 1. **屏幕解锁**:Android提供了多种屏幕解锁方式,如PIN、图案、密码等。开发者可以通过KeyguardManager和...
在Android系统中,锁屏和解锁功能是用户体验的重要组成部分,为用户提供安全的设备保护。...在开发过程中,遵循Android的最佳实践,如使用MVVM架构、LiveData等现代开发工具,可以使代码更易于维护和扩展。
综上所述,在Android系统的启动过程中,最核心的部分是`zygote`和`SystemServer`两个组件。`zygote`负责建立基础的Java虚拟机环境,支持各个应用程序的启动;而`SystemServer`则用于管理Android后台的各种服务,并...
- 可以添加其他动画效果,如淡入淡出、缩放等,使解锁过程更加生动。 四、注意事项 - 为了兼容不同设备和屏幕尺寸,确保解锁界面响应式设计,考虑使用比例或者权重来布局。 - 滑动解锁的敏感度和弹性效果需要适当...
【Android仿S4阳光解锁】是一种在Android平台上实现的创新解锁方式,灵感来源于三星Galaxy S4手机的特色解锁效果。这种解锁方式以其独特的视觉体验和互动性深受用户喜爱,可以提升应用程序的用户体验和趣味性。下面...
手势解锁在Android系统中是一种常见的用户验证方式,它允许用户通过在屏幕上绘制特定的图案来解锁设备或应用,提供了一种直观且个性化的安全机制。本文将深入探讨Android手势解锁的源码,揭示其背后的工作原理和技术...
在Android系统中,图形解锁是一种常见的用户验证方式,它允许用户通过在屏幕上画出特定的图形来解锁设备,提供了一种既直观又安全的解锁体验。这个“Android 图形解锁源码.zip”资源包含了实现这一功能的相关源代码...
5. `BroadcastReceiver`:可能用于监听设备状态,如屏幕锁定或解锁事件,以便在适当的时候启动或关闭图形解锁界面。 在学习这个源码时,你可以关注以下几个方面: 1. 触摸事件的处理:了解`PatternView`如何捕获和...
本文将深入解析Android开机启动过程中的锁屏机制,重点探讨`PhoneWindowManager`与`KeyguardViewMediator`在系统启动及锁屏管理中的作用。 #### 二、开机启动锁屏关键组件分析 ##### 1. `PhoneWindowManager`与`...
在Android平台上,开发一款屏幕锁屏的Demo是一个常见的任务,特别是在设计安全应用或者自定义启动器时。这个"android 屏幕 锁屏 demo"项目就是这样一个实例,它利用了九宫格的解锁方式,结合View的操作来实现一个...
这篇文档将深入解析《Android应用源码仿支付宝九宫格解锁》的相关知识点,该资源包含了一个实现类似支付宝九宫格解锁功能的Android应用源码,以及相关的图片和说明文件。 首先,九宫格解锁是一种常见于移动设备的...
在九宫格解锁应用中,这里可能会定义一个启动活动,负责显示解锁界面。 2. **res**目录:资源文件夹包含所有用户界面相关的元素,如布局文件(XML)、图像、颜色、字符串等。九宫格解锁的界面设计会在这里定义,...
首先,开机启动过程中,当PhoneWindowManager.systemReady()方法被调用时,标志着系统核心服务已经准备就绪。接着,KeyguardViewMediator.onSystemReady()被调用,这是锁屏和解锁逻辑的核心控制器。...