Android4.2 长按POWER键休眠

描述:

Android平板或手机上,长按POWER键, 一般会弹出关机选择界面,提示关机或重启啥的。现在项目要求长按Power键直接进入休眠。


实现:

源码frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java中有interceptPowerKeyDown()方法,如果是长按,则会运行mPowerLongPress线程,我们来看mPowerLongPress线程的源码(注意红色部分是新添加的休眠代码):

    private final Runnable mPowerLongPress = new Runnable() {
        @Override
        public void run() {
            // The context isn't read
            if (mLongPressOnPowerBehavior < 0) {
                mLongPressOnPowerBehavior = mContext.getResources().getInteger(
                        com.android.internal.R.integer.config_longPressOnPowerBehavior);
            }
            int resolvedBehavior = mLongPressOnPowerBehavior;
            if (FactoryTest.isLongPressOnPowerOffEnabled()) {
                resolvedBehavior = LONG_PRESS_POWER_SHUT_OFF_NO_CONFIRM;
            }

            switch (resolvedBehavior) {
            case LONG_PRESS_POWER_NOTHING:
                mPowerKeyHandled = true;
                mPowerManager.goToSleep(SystemClock.uptimeMillis());                // here here ...
                break;
            case LONG_PRESS_POWER_GLOBAL_ACTIONS:
                mPowerKeyHandled = true;
                if (!performHapticFeedbackLw(null, HapticFeedbackConstants.LONG_PRESS, false)) {
                    performAuditoryFeedbackForAccessibilityIfNeed();
                }
                sendCloseSystemWindows(SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS);
                showGlobalActionsDialog();
                break;
            case LONG_PRESS_POWER_SHUT_OFF:
            case LONG_PRESS_POWER_SHUT_OFF_NO_CONFIRM:
                mPowerKeyHandled = true;
                performHapticFeedbackLw(null, HapticFeedbackConstants.LONG_PRESS, false);
                sendCloseSystemWindows(SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS);
                mWindowManagerFuncs.shutdown(resolvedBehavior == LONG_PRESS_POWER_SHUT_OFF);
                break;
            }
        }
    };

即根据resolvedBehavior不同,执行不同的操作流程,所以我们修改frameworks/base/core/res/res/values/config.xml把config_longPressOnPowerBehavior的值改为0,如下:

$ git diff  frameworks/base/core/res/res/values/config.xml
diff --git a/bsp/android/frameworks/base/core/res/res/values/config.xml b/bsp/android/frameworks/base/core/res/res/values/config.xml
index 84718bd..7322ca0 100755
--- a/bsp/android/frameworks/base/core/res/res/values/config.xml
+++ b/bsp/android/frameworks/base/core/res/res/values/config.xml
@@ -406,7 +406,7 @@
             1 - Global actions menu
             2 - Power off (with confirmation)
     -->
-    <integer name="config_longPressOnPowerBehavior">2</integer>                               //原来的代码
+    <integer name="config_longPressOnPowerBehavior">0</integer>                              //修改后

总结:

1. 修改config.xml,把config_longPressOnPowerBehavior的值设置为0

2. 修改PhoneWindowManager.java中mPowerLongPress的run方法,当resolvedBehavior为LONG_PRESS_POWER_NOTHING时,调用休眠流程。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值