onSearchRequested()不再适用于Android 4.x +?

我的应用拦截searchbutton,以提供更多的相关应用程序本身:

@Override public boolean onSearchRequested() { if (isOkToSearchWithinTheApp()) doRelevantOwnSearch(); return true; } 

除了我的新4.1.2手机之外,它在所有的Android版本上都运行良好(仍然有效):在这个Android 4.x手机上,自己调用了一个名为“Google Now”的东西。

这是一个众所周知的(即文件化的变化)?

如果是这样,是否有任何其他方法来“拦截”searchbutton?

更新:我完全按照下面的@ daniel_c05的build议进行,但是触摸searchbutton仍然会产生相同的行为:带来Googlesearch活动(并暂停我自己的活动,这显然不是所需的行为):

在这里输入图像说明

顺便说一句,在这个类似的问题接受的答案是不能接受的……那么,有没有其他方法来“拦截”searchbutton?

Solutions Collecting From Web of "onSearchRequested()不再适用于Android 4.x +?"

是的,谷歌劫持了searchbutton,当它引入果冻豆(Android 4.1),如果你试图拦截它在onKeyDown() :

 ... else if (keyCode == KeyEvent.KEYCODE_SEARCH) { return this.onSearchRequested(); } 

你会意识到这也行不通。

但也许这个解决方法可以帮助你?

我有一个运行4.2.1的Galaxy Nexus,使用oonSearchRequested没有问题

有几件事要考虑:

1 – 确保您在清单中声明可search的活动实际上是可search的,并确保您添加search意图filter来捕获onSearchRequested:

  <activity android:name="com.lazybits.rae.movil.Results" android:label="@string/title_activity_results" android:launchMode="singleTask" android:parentActivityName="com.lazybits.rae.movil.Home" > <intent-filter> <action android:name="android.intent.action.SEARCH" /> </intent-filter> <meta-data android:name="android.app.searchable" android:resource="@xml/searchable" /> </activity> 

2 – 重写onKeyDown()来创build一个合适的search界面:

  @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if ((keyCode == KeyEvent.KEYCODE_SEARCH) && isOkToSearchWithinTheApp) { onSearchRequested(); return true; } return super.onKeyDown(keyCode, event); } 

此时,如果您有一个searchWidget,它应该自动加载,而您现在只是在等待用户input。 你会想要重写onNewIntent来处理search通过Action.Search或Action.View取决于你的searchable.xml的行为。

编辑

好的,你可以帮我一个忙吗,只要重写onKeyDown,但是不要放任何代码,就像这样:

 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_SEARCH) { //do nothing, simply return true to avoid regular behavious return true; } } 

我想testing的,是看看现在是否会阻止Google来临,这应该没有什么。 如果这样的话,那么你可以添加你的代码,只要确保你返回true(以避免事件的进一步传播),并且你不会调用onSearchRequested。