OnSearchRequested () ya no funciona en Android 4.x +?

Mi aplicación intercepta el botón de búsqueda para ofrecer algo más relevante para la aplicación:

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

Funcionó (sigue funcionando) genial en todas las versiones de Android, excepto en mi nuevo teléfono 4.1.2: En este teléfono Android 4.x, se invoca algo llamado "Google Now".

¿Es esto un cambio conocido (es decir, documentado)?

Si es así, ¿hay alguna otra forma de "interceptar" el botón de búsqueda?

Actualización: Hice exactamente lo sugerido por @ daniel_c05 a continuación, pero al tocar el botón de búsqueda sigue produciendo el mismo comportamiento: Llevar la actividad de búsqueda de Google (y suspender mi propia actividad, que claramente no es el comportamiento deseado):

Introduzca aquí la descripción de la imagen

BTW, la respuesta aceptada en esta cuestión similar no es aceptable … así, ¿hay alguna otra manera de "interceptar" el botón de búsqueda?

Yup, Google secuestró el botón de búsqueda cuando introdujo Jelly Bean (Android 4.1) y si intenta interceptarlo antes, en onKeyDown () :

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

Te darás cuenta de que tampoco funcionará.

Pero tal vez esta solución podría ayudarle?

Tengo un Galaxy Nexus ejecutando 4.2.1 y no tengo problemas con oonSearchRequested

Algunas cosas a considerar:

1 – Asegúrese de declarar en su manifiesto que la actividad de búsqueda es de hecho investigable, y asegúrese de agregar el filtro de intención de búsqueda para capturar 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 – Anular onKeyDown() para crear una interfaz de búsqueda adecuada:

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

En este punto si usted tiene un searchWidget que debe cargarse automáticamente, y que ahora están esperando en la entrada del usuario. Usted querría anular onNewIntent para manejar la búsqueda a través de Action.Search o Action.View dependiendo de su comportamiento searchable.xml.

EDITAR

OK, puede hacerme un favor, y simplemente intenta anular onKeyDown, pero no poner ningún código en él, como esto:

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

Lo que quiero probar, es ver si eso va a detener a Google ahora de venir, esto no debe hacer absolutamente nada. Si eso funciona, después puedes agregar tu código, solo asegúrate de devolver true (para evitar una mayor propagación del evento), y que no llames a onSearchRequested.

  • Codificación UTF-8 en WebView e ICS
  • ADB no reconoce mi Galaxy Nexus - Win7
  • Cómo cambiar el color de texto del conmutador en Android
  • Forzar la acción Mostrar la barra de búsqueda
  • No se puede mostrar el teclado automáticamente en el SearchView
  • Barra de Acción de Android: haga clic en el botón Arriba por programación
  • EditText no muestra la entrada actual (Android 4)
  • ¿Cómo entrar en el modo de fastboot para las tabletas Allwinner A10 (ICS)?
  • El texto largo pasa a la siguiente línea en ICS, pero no en GB y debajo
  • Los dispositivos ADK 1.0 no funcionan con Jelly Bean, ¿por qué?
  • Vista web de Android cargando la página html5 de la tarjeta SD con videos mp4 en varios API
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.