android 长按power键的触发时间

简介: android 长按power键的触发时间

按键处理
frameworks\base\services\core\java\com\android\server\policy\PhoneWindowManager.java

@Override
        void onLongPress(long eventTime) {
            if (mSingleKeyGestureDetector.beganFromNonInteractive()
                    && !mSupportLongPressPowerWhenNonInteractive) {
                Slog.v(TAG, "Not support long press power when device is not interactive.");
                return;
            }

            powerLongPress(eventTime);
        }

        @Override
        void onVeryLongPress(long eventTime) {
            mActivityManagerInternal.prepareForPossibleShutdown();
            powerVeryLongPress();
        }

事件行为


<!-- Control the behavior when the user long presses the power button for a long time.
            0 - Nothing
            1 - Global actions menu
    -->
    <integer name="config_veryLongPressOnPowerBehavior">1</integer>

事件的响应时间

<!-- Time to wait while a button is pressed before triggering a very long press. -->
    <integer name="config_veryLongPressTimeout">3500</integer>

/**

 * Rule for single power key gesture.
 */
private final class PowerKeyRule extends SingleKeyGestureDetector.SingleKeyRule {
    PowerKeyRule(int gestures) {
        super(KEYCODE_POWER, gestures);
    }

    @Override
    int getMaxMultiPressCount() {
        return getMaxMultiPressPowerCount();
    }

    @Override
    void onPress(long downTime) {
        powerPress(downTime, 1 /*count*/,
                mSingleKeyGestureDetector.beganFromNonInteractive());
    }

    @Override
    long getLongPressTimeoutMs() {
        if (getResolvedLongPressOnPowerBehavior() == LONG_PRESS_POWER_ASSISTANT) {
            return mLongPressOnPowerAssistantTimeoutMs;
        } else {
            return super.getLongPressTimeoutMs();
        }
    }

    @Override
    void onLongPress(long eventTime) {
        if (mSingleKeyGestureDetector.beganFromNonInteractive()
                && !mSupportLongPressPowerWhenNonInteractive) {
            Slog.v(TAG, "Not support long press power when device is not interactive.");
            return;
        }

        powerLongPress(eventTime);
    }

    @Override
    void onVeryLongPress(long eventTime) {
        mActivityManagerInternal.prepareForPossibleShutdown();
        powerVeryLongPress();
    }

    @Override
    void onMultiPress(long downTime, int count) {
        powerPress(downTime, count, mSingleKeyGestureDetector.beganFromNonInteractive());
    }
}

static SingleKeyGestureDetector get(Context context) {
        SingleKeyGestureDetector detector = new SingleKeyGestureDetector();
        sDefaultLongPressTimeout = context.getResources().getInteger(
                com.android.internal.R.integer.config_globalActionsKeyTimeout);
        sDefaultVeryLongPressTimeout = context.getResources().getInteger(
                com.android.internal.R.integer.config_veryLongPressTimeout);
        return detector;
    }

frameworks\base\services\core\java\com\android\server\policy\SingleKeyGestureDetector.java

long getVeryLongPressTimeoutMs() {
            return sDefaultVeryLongPressTimeout;
        }

if (mKeyPressCounter == 1) {
            if (mActiveRule.supportLongPress()) {
                final Message msg = mHandler.obtainMessage(MSG_KEY_LONG_PRESS, keyCode, 0,
                        mActiveRule);
                msg.setAsynchronous(true);
                mHandler.sendMessageDelayed(msg, mActiveRule.getLongPressTimeoutMs());
            }

            if (mActiveRule.supportVeryLongPress()) {
                final Message msg = mHandler.obtainMessage(MSG_KEY_VERY_LONG_PRESS, keyCode, 0,
                        mActiveRule);
                msg.setAsynchronous(true);
                mHandler.sendMessageDelayed(msg, mActiveRule.getVeryLongPressTimeoutMs());
            }
        }
目录
相关文章
|
2月前
|
Android开发
Android学习 —— 测试init.rc中的条件触发的处理顺序
Android学习 —— 测试init.rc中的条件触发的处理顺序
|
6月前
|
Java Android开发
Android12 双击power键启动相机源码解析
Android12 双击power键启动相机源码解析
185 0
|
4月前
|
存储 API Android开发
kotlin开发安卓app,使用webivew 触发 onShowFileChooser, 但只能触发一次,第二次无法触发,是怎么回事。 如何解决
在Android WebView开发中,`onShowFileChooser`方法用于开启文件选择。当用户只能选择一次文件可能是因为未正确处理选择回调。解决此问题需确保:1) 实现`WebChromeClient`并覆写`onShowFileChooser`;2) 用户选择文件后调用`ValueCallback.onReceiveValue`传递URI;3) 传递结果后将`ValueCallback`设为`null`以允许再次选择。下面是一个Kotlin示例,展示如何处理文件选择和结果回调。别忘了在Android 6.0+动态请求存储权限,以及在Android 10+处理分区存储。
|
4月前
|
测试技术 Android开发
Android中使用performClick触发点击事件
Android中使用performClick触发点击事件
android4.2 不显示锁屏同时POWER不进休眠
android4.2 不显示锁屏同时POWER不进休眠
85 0
android4.2 长按POWER键3秒关机
android4.2 长按POWER键3秒关机
103 0
|
移动开发 数据可视化 前端开发
解决安卓收起键盘无法触发失焦事件的问题
解决安卓收起键盘无法触发失焦事件的问题
1168 0
|
Java Android开发 开发者
【Android 电量优化】JobScheduler 源码分析 ( JobServiceContext 源码分析 | 闭环操作总结 | 用户提交任务 | 广播接收者接受相关广播触发任务执行 )★
【Android 电量优化】JobScheduler 源码分析 ( JobServiceContext 源码分析 | 闭环操作总结 | 用户提交任务 | 广播接收者接受相关广播触发任务执行 )★
213 0