天天看点

Android Home 长按键处理Android Home 长按键处理

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