長按Home鍵喚起Google Search
android默認處理長按Home鍵會喚起最近使用應用列表,而部分廠商在安裝了GMS後,Google會要求
修改長按Home鍵喚起Google Search
一,具有實體按鍵的廠商可以更改配置文件
Frameworks/base/core/res/res/values/Config.xml
<integer name="config_longPressOnHomeBehavior">2</integer>
改爲0即可,這裏的值可以設置三個,1代表喚起recent app界面;2代表喚起搜索界面(Google Search);0代表Nothing;
具體實現是在PhoneWindowManager中handleLongPressOnHome處理Home鍵長按事件
private void handleLongPressOnHome(int deviceId) {
if (mLongPressOnHomeBehavior == LONG_PRESS_HOME_NOTHING) {
return;
}
mHomeConsumed = true;
performHapticFeedbackLw(null, HapticFeedbackConstants.LONG_PRESS, false);
switch (mLongPressOnHomeBehavior) {
case LONG_PRESS_HOME_ALL_APPS:
launchAllAppsAction();
break;
case LONG_PRESS_HOME_ASSIST:
launchAssistAction(null, deviceId);
break;
default:
Log.w(TAG, "Undefined home long press behavior: " + mLongPressOnHomeBehavior);
break;
}
}
二,虛擬按鍵的廠商需要修改SystemUi的導航欄設置
/SystemUI/ src/com/android/systemui/statusbar/phone/NavigationBarFragment.java
在此類中分別對home鍵的短按和長按都做了監聽
ButtonDispatcher homeButton = mNavigationBarView.getHomeButton();
homeButton.setOnTouchListener(this::onHomeTouch);
homeButton.setOnLongClickListener(this::onHomeLongClick);
我們只需要對onHomeLongClick做適當處理即可,比方說,切換到兒童模式長按home不會跳出google search
@VisibleForTesting
boolean onHomeLongClick(View v) {
Log.i(TAG, "onHomeLongClick");
if (!mNavigationBarView.isRecentsButtonVisible()
&& ActivityManagerWrapper.getInstance().isScreenPinningActive()) {
return onLongPressBackHome(v);
}
if (shouldDisableNavbarGestures()) {
return false;
}
mNavigationBarView.onNavigationButtonLongPress(v);
mMetricsLogger.action(MetricsEvent.ACTION_ASSIST_LONG_PRESS);
//add start
if(!isKidMode(getContext())){
mAssistManager.startAssist(new Bundle() /* args */);
//此處爲喚醒google search的地方
}
//add end