Android 13 拿起设备时唤醒和合盖灭屏冲突(与霍尔传感器功能冲突)

介绍

此设备是一个平板设备,有霍尔传感器,当磁吸盖关上时息屏,当拿起设备时唤醒功能开启时,磁吸盖关上还是会被唤醒,这样就导致设备待机时放在背包中会增加耗电,现在需要当磁吸盖合上的时候不允许设备被拿起唤醒。

分析

首先找到霍尔传感器是通过什么触发,这里我通过:

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;
            }
            //*/
        }

    }

你可能感兴趣的:(Android,13,android)