Android 解锁屏启动过程
来源:互联网 发布:java程序执行入口 编辑:程序博客网 时间:2024/05/24 23:14
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启动。
一. 开机启动
在开机过程中无线模块初始化时获取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 解锁屏启动过程
- Android 解锁屏启动过程
- Android 解锁屏启动过程
- Android 解锁屏启动过程
- Android startService 启动自动解锁点亮屏幕
- Android startService 启动自动解锁点亮屏幕
- 解决Pixhawk启动解锁过程中出现一些问题
- Android 通话:后台通话过程中锁屏解锁,发现听筒内存在锁屏提示音
- android 解锁,锁屏流程
- android的锁屏解锁
- android亮屏解锁demo
- android 解锁屏监听 笔记
- android手势解锁-------后台恢复到前台就启动手势解锁
- android手势解锁-------后台恢复到前台就启动手势解锁
- android手势解锁-------后台恢复到前台就启动手势解锁
- Android开发开机自启动和屏幕解锁
- android开机自启动后自动解锁进入
- [转自冷知识]为什么你睡了11个小时仍觉得疲劳?因为你不会休息
- 下拉框支持搜索
- 宏观数据提取
- Android IPC 的详细分析 一
- Q75
- Android 解锁屏启动过程
- MySql Oracle SqlServer三大数据库的数据类型列表
- ubuntu 修改环境变量
- java实现电脑远程控制完整源代码
- php实现验证码的破解识别(初级篇) 本文转载自<这一客> http://www.geekso.com
- 自动截取图片一部分(一像素用于平铺)
- android 对话框弹出位置和透明度的设置
- 总结了近百个Android优秀开源项目,覆盖Android开发的每个领域
- cf 203