android P-sensor (Proximity Sensor)
.newWakeLock(PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK, TAG);
wakeLock.release(); //通话结束时会释放这个wakeLock, framework 会 disable p-sensor
mDisplayPowerRequest.useProximitySensor = shouldUseProximitySensorLocked();
......
mRequestWaitForNegativeProximity);
if (mProximitySensor != null) {
if (mPowerRequest.useProximitySensor && state != Display.STATE_OFF) {
setProximitySensorEnabled(true); //enable p-Sensor
if (!mScreenOffBecauseOfProximity
&& mProximity == PROXIMITY_POSITIVE) {
sendOnProximityPositiveWithWakelock();
}
} else if (mWaitingForNegativeProximity
&& mScreenOffBecauseOfProximity
&& mProximity == PROXIMITY_POSITIVE
&& state != Display.STATE_OFF) {
setProximitySensorEnabled(true); //enable on p-Sensor
} else {
setProximitySensorEnabled(false); // disable off p-Sensor, 屏幕亮起
mWaitingForNegativeProximity = false;
}
if (mScreenOffBecauseOfProximity
&& mProximity != PROXIMITY_POSITIVE) {
mScreenOffBecauseOfProximity = false; //p-Sensor 没用遮挡, 起作用
sendOnProximityNegativeWithWakelock();
}
} else {
mWaitingForNegativeProximity = false;
}
state = Display.STATE_OFF;
}
if (state == Display.STATE_OFF) {
brightness = PowerManager.BRIGHTNESS_OFF;
}
&& mSkipRampState == RAMP_STATE_SKIP_NONE
|| state == Display.STATE_DOZE)
&& !wasOrWillBeInVr) {
animateScreenBrightness(brightness,
slowChange ? mBrightnessRampRateSlow : mBrightnessRampRateFast);
} else {
animateScreenBrightness(brightness, 0);
}
if (enable) {
if (!mProximitySensorEnabled) {
// Register the listener.
// Proximity sensor state already cleared initially.
mProximitySensorEnabled = true;
mSensorManager.registerListener(mProximitySensorListener, mProximitySensor,
SensorManager.SENSOR_DELAY_NORMAL, mHandler);
}
} else {
if (mProximitySensorEnabled) {
// Unregister the listener.
// Clear the proximity sensor state for next time.
mProximitySensorEnabled = false;
mProximity = PROXIMITY_UNKNOWN;
mPendingProximity = PROXIMITY_UNKNOWN;
mHandler.removeMessages(MSG_PROXIMITY_SENSOR_DEBOUNCED);
mSensorManager.unregisterListener(mProximitySensorListener);
clearPendingProximityDebounceTime(); // release wake lock (must be last)
}
}
}
@Override
public void onSensorChanged(SensorEvent event) {
if (mProximitySensorEnabled) {
final long time = SystemClock.uptimeMillis();
final float distance = event.values[0];
boolean positive = distance >= 0.0f && distance < mProximityThreshold;
handleProximitySensorEvent(time, positive);
}
}
synchronized (mLock) {
if (mProximityPositive && reason == PowerManager.GO_TO_SLEEP_REASON_POWER_BUTTON) {
Slog.d(TAG, "Proximity positive sleep and do not sleep by power button");
return;
}
if (goToSleepNoUpdateLocked(eventTime, reason, flags, uid)) {
updatePowerStateLocked();
}
}
}
這時候,按power key, 手機會進入sleep 模式, p-sensor 會被關閉
......
// Apply the proximity sensor.
if (mProximitySensor != null) {
if (mPowerRequest.useProximitySensor && state != Display.STATE_OFF) {
setProximitySensorEnabled(true);
if (!mScreenOffBecauseOfProximity
&& mProximity == PROXIMITY_POSITIVE) {
mScreenOffBecauseOfProximity = true;
sendOnProximityPositiveWithWakelock();
}
} else if (mWaitingForNegativeProximity
&& mScreenOffBecauseOfProximity
&& mProximity == PROXIMITY_POSITIVE
&& state != Display.STATE_OFF) {
setProximitySensorEnabled(true);
} else {
setProximitySensorEnabled(false); // 按power key的時候,p-sensor 會被關閉
mWaitingForNegativeProximity = false;
}
mPowerRequest=policy=BRIGHT, useProximitySensor=true, screenBrightness=128, screenAutoBrightnessAdjustment=0.0, screenLowPowerBrightnessFactor=0.5, brightnessSetByUser=true, useAutoBrightness=false, blockScreenOn=false, lowPowerMode=false, boostScreenBrightness=false, dozeScreenBrightness=-1, dozeScreenState=UNKNOWN
mWaitingForNegativeProximity=false
mProximitySensor={Sensor name="EPL259x ALS/PS EPL259x", vendor="Eminent", version=2, type=8, maxRange=5.000305, resolution=0.0010070801, power=0.32, minDelay=0}
mProximitySensorEnabled=true
mProximityThreshold=5.0
mProximity=Positive
mPendingProximity=Positive
mPendingProximityDebounceTime=-1 (4802060 ms ago)
mScreenOffBecauseOfProximity=true
mAppliedAutoBrightness=false
mAppliedDimming=false
mAppliedLowPower=false
mPendingScreenOnUnblocker=null
mPendingScreenOff=false
mReportedToPolicy=REPORTED_TO_POLICY_SCREEN_ON
mScreenBrightnessRampAnimator.isAnimating()=false
mColorFadeOnAnimator.isStarted()=false
mColorFadeOffAnimator.isStarted()=false
android P-sensor (Proximity Sensor)相关推荐
- Android 8.1 DisplayPowerController(二) Proximity Sensor的亮灭屏
概述 P-Sensor亮屏和按Power键亮屏流程还是有些不同之处,如开始调用位置.PowerManagerService中的流程等,由于在平常遇到过许多PSensor亮屏相关Bug,因此这里独立地进 ...
- Android Proximity Sensor近距离传感器P-Sensor
好文章: Android 4.4中的距离/接近传感器 P-sensor(一) https://blog.csdn.net/kongjianjian1988/article/details/435248 ...
- 2022-04-13 Ambient Light Proximity Sensor 光感和距离传感器 STK3311X调试记录 RK3566 Android11平台
一.原理图,接口比较简单,就是I2C. 二.光感用轮询方式,距离用中断方式.代码. 1.dts配置 ls_stk3x1x: light@48 {compatible = "ls_stk3x ...
- 2022-06-29 AndroidR 获取接近传感器Proximity Sensor的信号,休眠和唤醒。
一.底层的驱动在这里不提,只关心上层. 二.实现AndroidR 获取接近传感器Proximity Sensor的信号,休眠和唤醒的方法:获取SENSOR_SERVICE服务,侦听Sensor事件. ...
- verp之增加接近传感器(proximity sensor)
V-REP offers a very powerful and efficient way to simulate proximity sensors. The user can model alm ...
- android APK 调用G—sensor驱动的过程
android上层应用apk到G-sensor driver的大致流程: Android HAL层,即硬件抽象层,是Google响应厂家"希望不公开源码"的要求推出的新概念 1,源 ...
- Android 屏幕自动旋转-Sensor属性
在activity中加入下面加粗部分即可,<activity android:name=".demo" android:label="@string/app_na ...
- Android层面上对sensor及event事件的处理
可能这篇总结写得会有一点凌乱,一会讲sensor,一会又讲event的.但是把两者摆在一起也是有原因的,sensor的处理是event事件的基础上实现的,正是因为sensor对event的依赖性,所以 ...
- [Android][sensor]物理sensor bring up流程
物理sensor bring up流程 物理sensor就是实体sensor,现实存在的.从硬件直接获取数据的sensor. 常见的物理sensor有:加速度acceleration.陀螺仪gyros ...
最新文章
- Python 3.10来了!!!
- android调用h5预加载图片,使用HTML5的页面资源预加载(Link prefetch)功能加速你的页面加载速度...
- Java中Thread中的实例方法_Java多线程2:Thread中的实例方法
- swift_022(Swift 的下标脚本)
- 外卖流量红利期已过:正从补贴战进入AI赛道
- MSSql-1内部数据库版本号
- 递归用法之“海盗分赃难题”
- python模块(5)-Matplotlib 简易使用教程
- 奇怪。短短几天,他们的论文怎么会有这么大的提升?
- 大学生利用漏洞薅肯德基羊毛,获刑两年半
- Excel导入SQL数据库出现的问题
- EDA课程设计代码汇总(信号发生器、抢答器、频率计、秒表、密码锁、计算器、VGA、PS2)
- 【jQuery】jQuery 教程
- 微信AirSync服务之计步器
- 添加fiddler证书到手机根目录
- 论文写作学习之引言章节撰写(学习深度之眼课程笔记,侵删)
- css网页布局小练习,文字案例,小米官网卡片案例
- 代码整洁之道--阅读
- 迪赛智慧数——文字(文本墙):80后儿童时期风靡的25种玩具
- “这本漫画真厉害!”男性榜第1名,进击的巨人三维模型来了~!