Android Home 长按键处理

本文详细解析了Android系统中Home键长按行为的处理过程,包括PhoneWindowManager类中的实现方式,以及配置文件config.xml中定义的不同行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android Home 长按键处理


1.在Android手机系统开发过程中,通常不同的客户会有要求Home长按处理不同的事务。下面结合源码分析下Long press home的处理过程。

PhoneWindowManager.java

phonewindowmanager中存在对按键操作的过滤分发功能,通过原发发现,Long press home 在此类中处理

    public long interceptKeyBeforeDispatching(WindowState win, KeyEvent event, int policyFlags) {
        ...
        handleLongPressOnHome(event.getDeviceId());
        ...
    }

    private void handleLongPressOnHome(int deviceId) {
    if (mLongPressOnHomeBehavior != LONG_PRESS_HOME_NOTHING) {
        mHomeConsumed = true;
        performHapticFeedbackLw(null, HapticFeedbackConstants.LONG_PRESS, false);

        if (mLongPressOnHomeBehavior == LONG_PRESS_HOME_RECENT_SYSTEM_UI) {
            toggleRecentApps();
        } else if (mLongPressOnHomeBehavior == LONG_PRESS_HOME_ASSIST) {
            launchAssistAction(null, deviceId);
        }
    }
}

聪handleLongPressOnHome接口中发现,mLongPressOnHomeBehavior变量是对home 长按操作的基本定义。

// What we do when the user long presses on home
private int mLongPressOnHomeBehavior;

mLongPressOnHomeBehavior变量赋值:

    private void readConfigurationDependentBehaviors() {
    mLongPressOnHomeBehavior = mContext.getResources().getInteger(
            com.android.internal.R.integer.config_longPressOnHomeBehavior);
    if (mLongPressOnHomeBehavior < LONG_PRESS_HOME_NOTHING ||
            mLongPressOnHomeBehavior > LONG_PRESS_HOME_ASSIST) {
        mLongPressOnHomeBehavior = LONG_PRESS_HOME_NOTHING;
    }

    mDoubleTapOnHomeBehavior = mContext.getResources().getInteger(
            com.android.internal.R.integer.config_doubleTapOnHomeBehavior);
    if (mDoubleTapOnHomeBehavior < DOUBLE_TAP_HOME_NOTHING ||
            mDoubleTapOnHomeBehavior > DOUBLE_TAP_HOME_RECENT_SYSTEM_UI) {
        mDoubleTapOnHomeBehavior = LONG_PRESS_HOME_NOTHING;
    }
}

从上面看到com.android.internal.R.integer.config_longPressOnHomeBehavior 是对长按home的功能定义出

frameworks\base\core\res\res\values\config.xml

    <integer name="config_longPressOnHomeBehavior">0</integer>

<!-- Control the behavior when the user double-taps the home button.
        0 - Nothing
        1 - Recent apps view in SystemUI
     This needs to match the constants in
     policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
     -->
<integer name="config_doubleTapOnHomeBehavior">0</integer>

config.xml中:
0:noting
1:recent apps view in systemUi

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值