介绍
此设备是一个平板设备,有霍尔传感器,当磁吸盖关上时息屏,当拿起设备时唤醒功能开启时,磁吸盖关上还是会被唤醒,这样就导致设备待机时放在背包中会增加耗电,现在需要当磁吸盖合上的时候不允许设备被拿起唤醒。
分析
首先找到霍尔传感器是通过什么触发,这里我通过:
adb shell
getevent -l
发现合盖时触发了F11
打开时触发了F12 那我们的思路就是在 PhoneWindowManager.java中修改
修改
首先我们定义一个boolean值来保存霍尔传感器的触发状态默认为false,当合盖时设为true,这里我们找到手势唤醒的判断出shouldEnableWakeGestureLp(),其中mWakeGestureEnabledSetting就是拿起唤醒的boolean值,这里我们就判断,当拿起唤醒开启时且,合盖时我们让mWakeGestureEnabled为false,不让设备唤醒即可。
路径:frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java
//*/soda water.20231226 hall state
static boolean HALL_STATE = false;
//*/
private boolean shouldEnableWakeGestureLp() {
//*/soda water.20231226 hall state
boolean mWakeGestureEnabled = mWakeGestureEnabledSetting;
if(mWakeGestureEnabled == true){
if(HALL_STATE == true){
mWakeGestureEnabled = false;
}
}
//*/
return mWakeGestureEnabled && !mDefaultDisplayPolicy.isAwake()
&& (getLidBehavior() != LID_BEHAVIOR_SLEEP
|| mDefaultDisplayPolicy.getLidState() != LID_CLOSED)
&& mWakeGestureListener.isSupported();
}
@Override
public long interceptKeyBeforeDispatching(IBinder focusedToken, KeyEvent event,
int policyFlags) {
//......略
case KeyEvent.KEYCODE_F11: {
//*/soda water.20231226 hall state
HALL_STATE = true;
//*/
result &= ~ACTION_PASS_TO_USER;
isWakeKey = false;
if (!mPowerManager.isInteractive()) {
useHapticFeedback = false; // suppress feedback if already non-interactive
}
if (down) {
sleepPress();
} else {
sleepRelease(event.getEventTime());
}
break;
}
//*/soda water.20231226 hall state
case KeyEvent.KEYCODE_F12: {
HALL_STATE = false;
result &= ~ACTION_PASS_TO_USER;
break;
}
//*/
}
}