长按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