Answerproximiysensor.java:
在来电时AnswerScreenPresenter初始化时,会判断Answerproximiysensor.shouldUse函数,如果返回true,则会生成Answerproximiysensor。
Answerproximiysensor 构造函数,通过answerProximityWakeLock.acquire注册距离传感器。
Answerproximiysensor.shouldUse函数在灭屏时才会返回true。
来电会亮屏。
但手第一次靠近时,距离传感器通知answerProximityWakeLock.onSensorChanged,进而通知pseudoScreenState.setOn();
pseudoScreenState.setON 通知其内部的listener.onPseudoScreenStateChanged();
其listener是什么?是IncallActivity..->其onResume函数调用了pseudoScreenState.addListener(this).
所以IncallActivity.onPseudoScreenStateChanged被调用,isON为false,导致pseudoBlackScreenOverlay黑屏界面visible,所以界面除了状态栏显示以外,其他黑屏。
另外answerProximityWakeLock.onSensorChanged会调用AnserProximitySensor.onScreenOn函数。AnserProximitySensor.onScreenOn调用cleanup函数,最终调用answerProximityWakeLock(PseudoProximityWaterLOck).release(),会unregister距离传感器。所以后面手靠近也不会再灭屏了。
如果想关闭这个功能。在Answerproximiysensor.shouldUse时判断CONFIG_ANSWER_PROXIMITY_SENSOR_ENABLED,入参默认值改为false即可。
(使用超声波传感器)