A la hora de realizar aplicaciones con multitud de datos, es conveniente saber que Android nos aporta recursos bastante potentes para integrar búsquedas dentro de nuestra aplicación. Como no podía ser de otra manera para Google, la consulta de datos esta muy presente en este tipo de terminales: simplemente haciendo clic en la barra de búsqueda del escritorio o pulsando la tecla de la lupa en el dispositivo, nos aparece una interfaz con teclado mediante la que podemos escribir cualquier palabra y nos devuelve una lista de sugerencias en función de las letras introducidas. Esta funcionalidad es, precisamente, la que podemos añadir a nuestra aplicación Android de forma bastante sencilla (bueno, una vez sabes cómo, ya que en la red no hay mucha información al respecto).

Primero, deberemos crear un archivo searchable.xml en la carpeta res/xml:


Después deberemos modificar nuestro AndroidManifest.xml con dos pequeños arreglos:

1. Para cada actividad que queremos que habilite la búsqueda, deberemos añadir lo siguiente:


   
      
      
   
   

Básicamente lo que hemos hecho es añadir un intent-filter porque ahora esta actividad debe aceptar actions de tipo SEARCH. También le adjuntamos en la etiqueta meta-data el archivo searchable.xml que hemos creado antes para que sepa que tiene que utilizar ese recurso a la hora de gestionar búsquedas.

2. Debemos declarar un ContentProvider (que crearemos en el siguiente paso) de la siguiente forma:

Nótese que el parámetro android:authorities no se corresponde con ningún archivo real, es simplemente un nombre que virtual que asignamos para el authority.

El siguiente paso es crear un ContentProvider, para que pueda alimentar los resultados de la búsqueda. En ese ContentProvider deberemos obtener los datos que queremos que sean "buscables" suporponiendo su método query.

Finalmente, tenemos que ir a las clases que reciben el resultado de la búsqueda y tratar la información recibida en this.getIntent()

Con todo esto montado, al pulsar la tecla de "search" del terminal, se habilitará la interfaz de búsqueda. Pero ¿qué pasa si queremos lanzar la búsqueda nativa desde un botón de nuestra aplicación? Pues nada, añadimos un código como el siguiente:

OnClickListener mSearchButtonListener = new OnClickListener() {
   public void onClick(View view) {
      onSearchRequested();
   }
};

Para más información, recomiendo visitar la biblia del SearchManager. En la segunda parte veremos cómo añadir datos propios a las búsquedas realizadas desde el exterior de nuestra aplicación.