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".
- En la barra de navegación Android 4.0 secuestrar el primer evento táctil
- Cómo evitar que mi aplicación aparezca en la lista de aplicaciones utilizadas recientemente
- Tema del holo del uso en Android <
- ¿Cómo puedo obtener la plataforma en Android 4.0 / Ice Cream Sandwich?
- No se muestra ninguna imagen de fondo en Galaxy Nexus (SOLO)?
¿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):
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?
- Establecer una conexión VPN de forma programática en android 4.0
- Difusión cuando se captura la captura de pantalla en Android 4.0?
- Cómo utilizar el widget de NumberPicker Android 4.0
- ¿Cómo pueden las fuentes provocar errores OpenGL fuera de la memoria?
- Cómo deshabilitar / ocultar el indicador de tres puntos (indicador de menú opcional) en los teléfonos ICS
- ¿Qué es RemoteControlClient en Android 4.0?
- Problema con la carga de archivos javascript locales dentro de una vista web
- Implementación de VerifyError en la API 1.6
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.
- Aplicar dos estilos de fuente diferentes a un TextView
- ¿Cómo simular el tacto del servicio del fondo con sendevent o la otra manera?