Android Home 长按键处理

来源:互联网 发布:永久域名自动转跳 编辑:程序博客网 时间:2024/06/01 20:09

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 homeprivate 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

0 0