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