跳转到主内容
websoft网络软件专家 - 深耕网络技术,打造实用软件!

Android通话时,手机怎么知道靠近耳朵就自动熄屏?

大家好,我是陈景序,今天我们来聊聊Android手机通话过程中,那神奇的近距离传感器(PSensor)是如何工作的。

在Android手机通话过程中,用户将手机靠近/远离头部,会导致手机屏幕灭/亮,这其实是PSensor在起作用。它就像我们的第六感,能感知到手机与物体的距离。

PSensor初始化流程

在Android 4.4以后,Phone分为了TeleService和InCallUI两个部分,PSensor的控制由packages/apps/InCallUI/src/com/android/incallui/ProximitySensor.java负责。

在通话状态变更之后,ProximitySensor会进行初始化。整个流程是由InCallPresenter中完成的,依赖于InCallUI中CallHandlerService的绑定。

PSensor使用流程

通话状态变更之后,ProximitySensor完成初始化。它的关键方法包括:

  • 构造方法,完成初始化
  • 完成善后工作,初始化以及挂断电话后会被调用
  • 当设备的方向改变之后会执行,用于判断是否启用PSensor
  • 当通话状态有改变则会通过InCallPresenter回调
  • 当通话过程中Audio模式有变化则执行
  • 拨号盘显示时回调,此时禁用PSensor以便用户输入
  • Config改变时回调,如开启物理键盘
  • InCallUI显示或隐藏时回调

这些方法中,都调用了updateProximitySensorMode方法,整个通话过程中正是由其触发PSensor的控制。

PSensor工作流程

PSensor的工作流程大致分为三个部分:WakeLock申请、PSensor关闭/点亮屏幕、系统休眠/唤醒。

WakeLock是Android提供的一种机制,用于阻止设备进入深度休眠。在通话过程中,电话应用会申请WakeLock,而这一步实际上在ProximitySensor的updateProximitySensorMode方法中完成。

PSensor关闭/点亮屏幕是通过注册PSensor Listener及PSensor状态触发亮灭屏来实现的。当PSensor的状态发生改变之后,便会回调其Listener的onSensorChanged()方法,并判断当前遮挡物是靠近还是远离PSensor。

最后,系统休眠/唤醒是通过updateSuspendBlockerLocked()方法触发的。该方法会触发系统了休眠/唤醒机制。

总结一下,PSensor在整个通话过程中实现屏幕亮灭的控制流程是由ProximitySensor初始化流程、PSensor使用流程和PSensor工作流程三个部分组成的。

想要了解更多关于Android手机技术的内容,欢迎关注我们的网站:websoft网络软件专家

相关文章