`

Android 解锁屏启动过程

阅读更多
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 的解锁屏过程涉及到多个组件和层次的交互,从硬件初始化到软件层面的用户界面展示,整个流程复杂而精细。这个过程确保了用户在设备启动后能够安全、流畅地解锁设备并进入主屏幕。理解这一过程对于...

    HTML5 Android手机屏幕解锁模拟器代码

    这个“HTML5 Android手机屏幕解锁模拟器代码”是一个基于HTML5技术实现的项目,它允许用户通过浏览器模拟Android手机的屏幕解锁过程。这种模拟器对于开发者测试移动应用的解锁功能,或者进行教学演示非常有用。 在...

    Android 图案解锁之九宫解锁源码.zip

    在Android系统中,图案解锁是一种常见的用户验证方式,它提供了直观且相对安全的屏幕锁定机制。这个"Android 图案解锁之九宫解锁源码.zip"压缩包包含了一份实现这一功能的源代码,对于想要深入理解Android开发或者...

    Android 九宫格解锁demo

    在Android开发中,九宫格解锁是一种常见的用户交互方式,尤其在早期的手机安全系统或者应用启动时较为流行。这个“Android九宫格解锁demo”是针对微众银行的解锁界面进行的一种模仿实现,旨在帮助开发者理解如何创建...

    Android自动解锁实例

    为了实现自动解锁,首先需要在AndroidManifest.xml文件中声明相应的权限,例如`android.permission.WAKE_LOCK`用于保持CPU运行不休眠,以及可能的`android.permission.DISABLE_KEYGUARD`来禁用屏幕锁。 2. **唤醒锁...

    android 上传和+解锁

    **二、Android解锁** 解锁在Android中可以有多种含义,这里我们讨论的是屏幕解锁和应用内的权限解锁。 1. **屏幕解锁**:Android提供了多种屏幕解锁方式,如PIN、图案、密码等。开发者可以通过KeyguardManager和...

    android简单锁屏解锁功能

    在Android系统中,锁屏和解锁功能是用户体验的重要组成部分,为用户提供安全的设备保护。...在开发过程中,遵循Android的最佳实践,如使用MVVM架构、LiveData等现代开发工具,可以使代码更易于维护和扩展。

    【Android】精美锁屏效果(滑动解锁)

    - 可以添加其他动画效果,如淡入淡出、缩放等,使解锁过程更加生动。 四、注意事项 - 为了兼容不同设备和屏幕尺寸,确保解锁界面响应式设计,考虑使用比例或者权重来布局。 - 滑动解锁的敏感度和弹性效果需要适当...

    android仿S4阳光解锁

    【Android仿S4阳光解锁】是一种在Android平台上实现的创新解锁方式,灵感来源于三星Galaxy S4手机的特色解锁效果。这种解锁方式以其独特的视觉体验和互动性深受用户喜爱,可以提升应用程序的用户体验和趣味性。下面...

    android-手势解锁源码

    手势解锁在Android系统中是一种常见的用户验证方式,它允许用户通过在屏幕上绘制特定的图案来解锁设备或应用,提供了一种直观且个性化的安全机制。本文将深入探讨Android手势解锁的源码,揭示其背后的工作原理和技术...

    Android 图形解锁源码.zip源码资源下载

    在Android系统中,图形解锁是一种常见的用户验证方式,它允许用户通过在屏幕上画出特定的图形来解锁设备,提供了一种既直观又安全的解锁体验。这个“Android 图形解锁源码.zip”资源包含了实现这一功能的相关源代码...

    Android 图形解锁源码.rar

    5. `BroadcastReceiver`:可能用于监听设备状态,如屏幕锁定或解锁事件,以便在适当的时候启动或关闭图形解锁界面。 在学习这个源码时,你可以关注以下几个方面: 1. 触摸事件的处理:了解`PatternView`如何捕获和...

    android 屏幕 锁屏 demo

    在Android平台上,开发一款屏幕锁屏的Demo是一个常见的任务,特别是在设计安全应用或者自定义启动器时。这个"android 屏幕 锁屏 demo"项目就是这样一个实例,它利用了九宫格的解锁方式,结合View的操作来实现一个...

    Android应用源码仿支付宝九宫格解锁.zip

    这篇文档将深入解析《Android应用源码仿支付宝九宫格解锁》的相关知识点,该资源包含了一个实现类似支付宝九宫格解锁功能的Android应用源码,以及相关的图片和说明文件。 首先,九宫格解锁是一种常见于移动设备的...

    android的九宫格解锁源代码

    在九宫格解锁应用中,这里可能会定义一个启动活动,负责显示解锁界面。 2. **res**目录:资源文件夹包含所有用户界面相关的元素,如布局文件(XML)、图像、颜色、字符串等。九宫格解锁的界面设计会在这里定义,...

    android开机启动LockScreen分析

    首先,开机启动过程中,当PhoneWindowManager.systemReady()方法被调用时,标志着系统核心服务已经准备就绪。接着,KeyguardViewMediator.onSystemReady()被调用,这是锁屏和解锁逻辑的核心控制器。...

    Android 屏幕锁源码

    在解锁过程中,`FingerprintManager.authenticate`方法用于启动指纹验证,成功后调用回调函数通知用户已解锁。 4. **权限和安全**: 在Android中,解锁机制与系统安全息息相关。权限控制确保只有拥有`USE_...

    基于Android的屏幕保护系统

    Android系统中的屏保服务是通过SystemServer进程来管理的,它会监听设备的状态,如是否闲置或解锁。当设备进入闲置状态时,SystemServer会启动屏保服务。开发者需要创建一个继承自`android.service_wallpaper....

    Android应用源码高仿三星GalaxyS4阳光解锁

    2. **自定义屏幕解锁**:Android系统允许开发者创建自定义的解锁方式,这涉及到对Keyguard相关的类和接口的使用,如KeyguardViewManager和KeyguardUpdateMonitor。开发者需要实现自己的解锁逻辑,确保在合适的光照...

    仿惠锁屏 侧滑解锁 屏蔽home按键

    - 在Android中,开发者可以创建自定义的启动器(Launcher)或锁屏应用,来替代系统默认的解锁方式。这通常涉及到对Android系统的深度定制,包括重写Activity生命周期方法和处理触摸事件。 - 自定义锁屏界面需要...

Global site tag (gtag.js) - Google Analytics