Cómo agregar sugerencias de búsqueda personalizadas

Cuando usas el widget o el diálogo de búsqueda de Android, puedes proporcionar sugerencias de búsqueda personalizadas que se crean a partir de los datos de tu app. Por ejemplo: Si tu app es un diccionario, puedes sugerir palabras del diccionario que coinciden con el texto ingresado en el campo de búsqueda antes de que el usuario termine de ingresar su consulta. Estas sugerencias son valiosas porque pueden predecir lo que el usuario quiere y proporcionarle acceso instantáneo a él. En la Figura 1, se muestra un ejemplo de un diálogo de búsqueda con sugerencias personalizadas.

Una vez que proporcionas sugerencias personalizadas, también puedes ponerlas a disposición del el cuadro de búsqueda rápida de todo el sistema, que te brinda acceso a tu contenido desde fuera del .

Antes de agregar sugerencias personalizadas, implementa el diálogo de búsqueda de Android o una widget de búsqueda para las búsquedas en tu app. Consulta Crear una interfaz de búsqueda Contenido y de terceros.

Conceptos básicos

Figura 1: Captura de pantalla de un diálogo de búsqueda con sugerencias de búsqueda personalizadas.

Cuando el usuario selecciona una sugerencia personalizada, el sistema envía Intent a tu actividad de búsqueda. A diferencia de una búsqueda normal que envía un intent con el ACTION_SEARCH acción, puedes definir tus sugerencias personalizadas para usar ACTION_VIEW—o cualquier otra acción de intención, además de incluir datos relevantes para el sugerencia seleccionada. En el ejemplo del diccionario, cuando el usuario selecciona un sugerencia, la app puede abrir inmediatamente la definición de esa palabra, en lugar de buscar coincidencias en el diccionario.

Para proporcionar sugerencias personalizadas, sigue estos pasos:

  • Implementa una actividad básica de búsqueda, como se describe en Crea una interfaz de búsqueda.
  • Modifica la configuración de búsqueda con información sobre el contenido proveedor de servicios de nube que brinda sugerencias personalizadas.
  • Crear una tabla, por ejemplo, en un SQLiteDatabase, para tus sugerencias y formatear la tabla con las columnas obligatorias.
  • Crea un contenido proveedor que tenga acceso a tu tabla de sugerencias y declara el de servicios en tu manifiesto.
  • Declara el tipo de Intent que se enviará cuando el usuario seleccione un sugerencia, incluida una acción personalizada y datos personalizados.

Así como el sistema Android muestra el diálogo de búsqueda, también muestra tu sugerencias de búsqueda. Necesitas un proveedor de contenido desde el cual el sistema pueda recuperar las sugerencias. Leído Proveedores de contenido para aprender a crear un proveedor de contenido.

Cuando el sistema identifica que tu actividad se puede buscar y proporciona sugerencias de búsqueda, el siguiente procedimiento se lleva a cabo cuando el usuario ingresa un consulta:

  1. El sistema toma el texto de la búsqueda, es decir, lo que se ingrese hasta ahora, y realiza una consulta a tu proveedor de contenido que administra tu sugerencias.
  2. Tu proveedor de contenido devuelve un Cursor que apunta a todas las sugerencias relevantes para la búsqueda texto.
  3. El sistema muestra la lista de sugerencias proporcionadas por el Cursor

Una vez que se muestran las sugerencias personalizadas, puede ocurrir lo siguiente:

  • Si el usuario ingresa otra letra o cambia la consulta de alguna manera, el los pasos anteriores se repiten y la lista de sugerencias se actualiza en consecuencia.
  • Si el usuario ejecuta la búsqueda, se ignoran las sugerencias y la se entrega la búsqueda a tu actividad de búsqueda con la configuración ACTION_SEARCH.
  • Si el usuario selecciona una sugerencia, se envía un intent a tu con una acción y datos personalizados para que tu app pueda abrirse el contenido sugerido.

Modifica la configuración de búsqueda

Para admitir las sugerencias personalizadas, agrega el el atributo android:searchSuggestAuthority al <searchable> en el archivo de configuración de búsqueda como se muestra en el siguiente ejemplo:

<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
    android:label="@string/app_label"
    android:hint="@string/search_hint"
    android:searchSuggestAuthority="com.example.MyCustomSuggestionProvider">
</searchable>

Es posible que necesites atributos adicionales, según el tipo de intent que adjunta a cada sugerencia y el formato que quieres darle a las consultas para tu contenido proveedor. Los otros atributos opcionales se analizan a continuación secciones.

Cómo crear un proveedor de contenido

Si quieres crear un proveedor de contenido para sugerencias personalizadas, primero consulta Proveedores de contenido para aprender a crear un proveedor de contenido. Un proveedor de contenido para personalizados sugerencias es similar a cualquier otro proveedor de contenido. Sin embargo, para cada sugerencia que proporciones, la fila respectiva en el Cursor debe incluir columnas específicas que el sistema comprenda y utilice para formatear los sugerencias.

Cuando el usuario ingresa texto en el diálogo o widget de búsqueda, el sistema consulta a tu proveedor de contenido para obtener sugerencias llamando query() cada vez que se ingresa una letra. En tu implementación de query(), tu proveedor de contenido debe buscar tus datos de sugerencias y devolver un Cursor que apunta a las filas que determina que son buenas sugerencias.

Los detalles sobre la creación de un proveedor de contenido para sugerencias personalizadas están que se analizan en las siguientes dos secciones:

Maneja la consulta de sugerencias
Cómo envía el sistema solicitudes a tu proveedor de contenido y cómo manejar de ellos.
Crea una tabla de sugerencias
Cómo definir las columnas que el sistema espera en la Se muestra Cursor con cada consulta.

Maneja la consulta de sugerencias

Cuando el sistema solicita sugerencias de tu proveedor de contenido, llama el método query() de tu proveedor de contenido Implementa este método para busca tus datos de sugerencias y muestra un Cursor que apunta al sugerencias que consideres relevantes.

Este es un resumen de los parámetros que el sistema pasa a tu query(), en orden:

  1. uri

    Siempre un contenido Uri, con el formato de sigue:

    content://your.authority/optional.suggest.path/SUGGEST_URI_PATH_QUERY
    

    El comportamiento predeterminado es que el sistema pase este URI y agregue la consulta texto a ella:

    content://your.authority/optional.suggest.path/SUGGEST_URI_PATH_QUERY/puppies
    

    El texto de la consulta al final se codifica con reglas de codificación de URI, por lo que podrías necesitas decodificarlo antes de realizar una búsqueda.

    La parte de optional.suggest.path solo se incluye en el URI si configuras esa ruta en el archivo de configuración de búsqueda con el atributo android:searchSuggestPath. Solo es necesaria si usas el mismo proveedor de contenido para varias actividades de búsqueda. Si En este caso, desambigúa la fuente de la consulta de sugerencia.

  2. projection
    Siempre es nulo.
  3. selection
    Es el valor proporcionado en android:searchSuggestSelection. del archivo de configuración de búsqueda, o un valor nulo si no declarar el atributo android:searchSuggestSelection El en la siguiente sección.
  4. selectionArgs
    Contiene la búsqueda como el primer y único elemento del array si declaras el atributo android:searchSuggestSelection en la configuración de búsqueda. Si no declaras android:searchSuggestSelection, entonces este parámetro es nulo. En la siguiente sección, se analiza este tema con más detalle.
  5. sortOrder
    Siempre es nulo.

El sistema puede enviar el texto de la búsqueda de dos maneras. La forma predeterminada es para que el texto de la consulta se incluya como la última ruta del URI de contenido que se pasó el parámetro uri. Sin embargo, si incluyes un valor de selección en el android:searchSuggestSelection de tu configuración de búsqueda , el texto de la consulta pasa como el primer elemento de la Array de cadenas selectionArgs. Estas dos opciones se describen a continuación.

Obtén la consulta en el URI

De forma predeterminada, la consulta se agrega como el último segmento de uri. parámetro: un objeto Uri. Para recuperar el texto de la consulta de esta caso, uso getLastPathSegment(), como se muestra en el siguiente ejemplo:

Kotlin

val query: String = uri.lastPathSegment.toLowerCase()

Java

String query = uri.getLastPathSegment().toLowerCase();

Esto muestra el último segmento de Uri, que es la consulta. el texto que ingresa el usuario.

Obtén la consulta en los argumentos de selección

En lugar de usar el URI, podría ser más conveniente para tu query() para recibir todo lo que necesita para realizar la por lo que quizás quieras que los resultados de selection y Parámetros selectionArgs para llevar los valores adecuados En este En este caso, agrega el atributo android:searchSuggestSelection a tu de búsqueda con tu cadena de selección de SQLite. En la selección incluye un signo de interrogación (?) como marcador de posición para la de búsqueda. El sistema llama a query() con la cadena de selección como el parámetro selection y la búsqueda como primer elemento en el array selectionArgs.

Por ejemplo, así es como podrías formar el El atributo android:searchSuggestSelection para crear un texto completo instrucción de búsqueda:

<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
    android:label="@string/app_label"
    android:hint="@string/search_hint"
    android:searchSuggestAuthority="com.example.MyCustomSuggestionProvider"
    android:searchSuggestIntentAction="android.intent.action.VIEW"
    android:searchSuggestSelection="word MATCH ?">
</searchable>

Con esta configuración, tu método query() entrega el el parámetro selection como "word MATCH ?" y el selectionArgs como la búsqueda. Cuando pasas estos a una instancia de SQLite query() de codificador-decodificador, como sus respectivos argumentos, se sintetizan es decir, el signo de interrogación se reemplaza por el texto de la consulta. Si recibes consultas de sugerencias de esta manera y necesitas agregar comodines a la consulta agrega texto o agrega un prefijo al parámetro selectionArgs, ya que Este valor se encierra entre comillas y se inserta en lugar del signo de interrogación.

Otro atributo del ejemplo anterior es android:searchSuggestIntentAction, que define la acción de intent enviados con cada intent cuando el usuario selecciona una sugerencia. Esto se analiza más adelante en el artículo Cómo declarar un intent para sugerencias.

Crea una tabla de sugerencias

Cuando muestras sugerencias al sistema con un Cursor, el sistema espera columnas específicas en cada fila. Ya sea que almacenes tus datos de sugerencias en una base de datos SQLite en el dispositivo, una base de datos en una un servidor u otro formato en el dispositivo o en la Web, formatear las sugerencias como filas en una tabla y presentarlos con un Cursor.

El sistema comprende varias columnas, pero solo se requieren dos de ellas:

_ID
Un ID de fila de número entero único para cada sugerencia. El sistema requiere que esto para presentar sugerencias ListView
SUGGEST_COLUMN_TEXT_1
La string que se presenta como una sugerencia.

Todas las columnas siguientes son opcionales. La mayoría se analizan con más detalle en el secciones a continuación.

SUGGEST_COLUMN_TEXT_2
Una string. Si su Cursor incluye esta columna, todas las sugerencias se proporcionan en un formato de dos líneas. La cadena de esta columna es se muestra como una segunda línea de texto más pequeña debajo de la sugerencia principal texto. Puede ser nula o vacía para indicar que no hay texto secundario.
SUGGEST_COLUMN_ICON_1
Una string de URI de elemento de diseño de recurso, contenido o archivo. Si el Cursor incluye esta columna y, luego, se proporcionan todas las sugerencias en un formato de ícono más texto con el ícono de elemento de diseño a la izquierda. Esta puede ser nulo o cero para indicar que no hay icono en esta fila.
SUGGEST_COLUMN_ICON_2
Una string de URI de elemento de diseño de recurso, contenido o archivo. Si el Cursor incluye esta columna y, luego, se proporcionan todas las sugerencias en un formato de ícono más texto con el ícono a la derecha. Puede ser null o cero para indicar que no hay ícono en esta fila.
SUGGEST_COLUMN_INTENT_ACTION
Una string de acción de intent. Si esta columna existe y contiene un valor en el en una fila determinada, la acción que se define aquí se usa cuando se forma el directorio . Si no se proporciona el elemento, la acción se toma desde Campo android:searchSuggestIntentAction en el campo de búsqueda configuración. Si la acción es la misma para todas las sugerencias, tendrá más eficiente para especificar la acción usando android:searchSuggestIntentAction y omite esta columna.
SUGGEST_COLUMN_INTENT_DATA
Una string de URI de datos. Si esta columna existe y contiene un valor de la esta fila, estos datos se usan para formar el intent de la sugerencia. Si el elemento no se proporciona, los datos se toman de la Campo android:searchSuggestIntentData en el campo de búsqueda configuración. Si no se proporciona ninguna fuente, el campo de datos del intent es null. Si tus datos son iguales para todas las sugerencias o se pueden describir usando una parte constante y un ID específico, es más eficiente especificarlo usando android:searchSuggestIntentData y omite esto .
SUGGEST_COLUMN_INTENT_DATA_ID
Una string de ruta de URI. Si esta columna existe y contiene un valor de la fila y, luego, “/” y este valor se agrega al campo de datos en el intent. Úsalo solo si el campo de datos especificado por el Atributo android:searchSuggestIntentData en el campo de búsqueda configuración ya esté establecida en una cadena base adecuada.
SUGGEST_COLUMN_INTENT_EXTRA_DATA
Datos arbitrarios. Si esta columna existe y contiene un valor en una fila determinada, Estos son los datos adicionales que se usan para formar el intent de la sugerencia. Si no se proporciona, el campo de datos adicionales del intent es nulo. Esta columna permite proporcionan datos adicionales que se incluyen como un extra en el de la intención EXTRA_DATA_KEY .
SUGGEST_COLUMN_QUERY
Si esta columna existe y este elemento existe en la fila dada, esto es los datos que se usan para formar la consulta de la sugerencia, incluidos como un adicional en la lista de elementos QUERY . Es obligatorio si la acción de la sugerencia es ACTION_SEARCH. pero, de lo contrario, es opcional.
SUGGEST_COLUMN_SHORTCUT_ID
Solo se utiliza cuando se proporcionan sugerencias para el cuadro de búsqueda rápida. Esta columna indica si una sugerencia de búsqueda debe almacenarse como un acceso directo y si debe validarse. Los atajos generalmente se forman cuando el usuario presiona una sugerencia del cuadro de búsqueda rápida. Si falta, el resultado se almacena como un atajo y nunca se actualiza. Si se establece en SUGGEST_NEVER_MAKE_SHORTCUT, el resultado no se almacena como un acceso directo. De lo contrario, el ID del atajo se usa para vuelve a consultar para obtener una sugerencia actualizada mediante SUGGEST_URI_PATH_SHORTCUT
SUGGEST_COLUMN_SPINNER_WHILE_REFRESHING
Solo se utiliza cuando se proporcionan sugerencias para el cuadro de búsqueda rápida. Esta columna especifica que se debe mostrar un ícono giratorio en lugar de un icono de SUGGEST_COLUMN_ICON_2, mientras que la combinación de teclas de esta sugerencia es se actualiza en el cuadro de búsqueda rápida.

La mayoría de estas columnas se analizan con más detalle en las siguientes secciones.

Cómo declarar un intent para las sugerencias

Cuando el usuario selecciona una sugerencia de la lista que aparece debajo de widget o diálogo de búsqueda, el sistema envía un Intent personalizado a tu actividad de búsqueda. Debes definir la acción y los datos para el intent.

Cómo declarar la acción de intent

La acción de intent más común para una sugerencia personalizada es ACTION_VIEW, que es apropiado cuando quieres abrir algo como la definición de una palabra, la información de contacto de una persona o una página web. Sin embargo, la acción de intent puede ser cualquier otra acción y puede ser diferente para cada una sugerencia.

En función de si quieres que todas las sugerencias usen la misma acción de intent, puedes definir la acción de dos maneras:

  • Usa el atributo android:searchSuggestIntentAction de tu de configuración de búsqueda para definir la acción de todas las sugerencias, como como se muestra en el siguiente ejemplo:
    <?xml version="1.0" encoding="utf-8"?>
    <searchable xmlns:android="http://schemas.android.com/apk/res/android"
        android:label="@string/app_label"
        android:hint="@string/search_hint"
        android:searchSuggestAuthority="com.example.MyCustomSuggestionProvider"
        android:searchSuggestIntentAction="android.intent.action.VIEW" >
    </searchable>
    
  • Usa la columna SUGGEST_COLUMN_INTENT_ACTION para definir acción para las sugerencias individuales. Para ello, agrega Columna SUGGEST_COLUMN_INTENT_ACTION a tu tabla de sugerencias y, para cada sugerencia, coloca en ella la acción que se usará, como "android.intent.action.VIEW"

También puedes combinar estas dos técnicas. Por ejemplo, puedes incluir el Atributo android:searchSuggestIntentAction con una acción que se debe se usa con todas las sugerencias de forma predeterminada; luego, anulará esta acción para algunas sugerencias declarando una acción diferente en el Columna SUGGEST_COLUMN_INTENT_ACTION. Si no incluyes ningún valor en la columna SUGGEST_COLUMN_INTENT_ACTION, el intent proporcionado en el atributo android:searchSuggestIntentAction está que se usan.

Cómo declarar datos de intents

Cuando el usuario selecciona una sugerencia, tu actividad de búsqueda recibe la la intención con la acción que defines, como se explicó en pero el intent también debe portar datos para que tu actividad identifique qué sugerencia se selecciona. Específicamente, los datos deben ser algo único para cada sugerencia, como el ID de fila para la sugerencia en tu tabla de SQLite. Cuando se recibe el intent, puedes recuperar los datos adjuntos con getData() o getDataString()

Puedes definir los datos incluidos con el intent de dos maneras:

  • Define los datos para cada sugerencia dentro del Columna SUGGEST_COLUMN_INTENT_DATA de la tabla de sugerencias.

    Proporciona toda la información de datos necesaria para cada intent en las sugerencias si incluyes la columna SUGGEST_COLUMN_INTENT_DATA y y, luego, lo propaga con datos únicos para cada fila. Los datos de esta columna se adjunta al intent exactamente como lo defines en esta columna. Puedes y, luego, recuperarlo con getData() getDataString()

  • Fragmenta un URI de datos en dos partes: la parte común a todas las sugerencias y la parte única de cada sugerencia. Coloca estas piezas en el Atributo android:searchSuggestintentData del objeto que se puede buscar actual y la columna SUGGEST_COLUMN_INTENT_DATA_ID de la tabla de sugerencias, respectivamente.

    En el siguiente ejemplo, se muestra cómo declarar la parte del URI que se comunes a todas las sugerencias Atributo android:searchSuggestIntentData de tus funciones de búsqueda actual:

      <?xml version="1.0" encoding="utf-8"?>
      <searchable xmlns:android="http://schemas.android.com/apk/res/android"
          android:label="@string/app_label"
          android:hint="@string/search_hint"
          android:searchSuggestAuthority="com.example.MyCustomSuggestionProvider"
          android:searchSuggestIntentAction="android.intent.action.VIEW"
          android:searchSuggestIntentData="content://com.example/datatable" >
      </searchable>
      

    Incluye la ruta final para cada sugerencia (la parte única) en la columna SUGGEST_COLUMN_INTENT_DATA_ID de tus sugerencias desde una tabla de particiones. Cuando el usuario selecciona una sugerencia, el sistema toma la cadena del android:searchSuggestIntentData, agrega una barra diagonal (/), y, luego, agrega el valor respectivo de SUGGEST_COLUMN_INTENT_DATA_ID para formar un contenido completo URI Luego, puedes recuperar el objeto Uri con getData()

Agrega más datos

Si necesitas expresar más información con tu intención, puedes agregar otra columna de la tabla, como SUGGEST_COLUMN_INTENT_EXTRA_DATA, que puede almacenar información adicional sobre la sugerencia. Los datos guardados en esta columna se coloca en el EXTRA_DATA_KEY del paquete adicional del intent.

Cómo controlar el intent

Después de proporcionar sugerencias de búsqueda personalizadas con intents personalizados, debes tu actividad de búsqueda para manejar estos intents cuando el usuario selecciona un sugerencia. Esto es además del control de ACTION_SEARCH algo que ya hace tu actividad de búsqueda. Aquí hay un ejemplo de cómo puedes controlar los intents durante la fase onCreate() devolución de llamada:

Kotlin

when(intent.action) {
    Intent.ACTION_SEARCH -> {
        // Handle the normal search query case.
        intent.getStringExtra(SearchManager.QUERY)?.also { query ->
            doSearch(query)
        }
    }
    Intent.ACTION_VIEW -> {
        // Handle a suggestions click, because the suggestions all use ACTION_VIEW.
        showResult(intent.data)
    }
}

Java

Intent intent = getIntent();
if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
    // Handle the normal search query case.
    String query = intent.getStringExtra(SearchManager.QUERY);
    doSearch(query);
} else if (Intent.ACTION_VIEW.equals(intent.getAction())) {
    // Handle a suggestions click, because the suggestions all use ACTION_VIEW.
    Uri data = intent.getData();
    showResult(data);
}

En este ejemplo, la acción de intent es ACTION_VIEW y los datos lleva un URI completo que apunta al elemento sugerido, como lo sintetiza el cadena android:searchSuggestIntentData y Columna SUGGEST_COLUMN_INTENT_DATA_ID. Luego, el URI pasa al método showResult() local que consulta al proveedor de contenido para el elemento especificado por el URI.

Vuelve a escribir el texto de la consulta

De forma predeterminada, si el usuario navega por la lista de sugerencias con direccionales, como la bola de seguimiento o el pad direccional, el texto de la consulta no actualización. Sin embargo, puedes reescribir temporalmente el texto de consulta del usuario como aparece. en el cuadro de texto con una consulta que coincida con la sugerencia enfocada. Esto permite que las usuario ve la consulta que se sugiere y puede seleccionar el cuadro de búsqueda y editarla la consulta antes de enviarla como búsqueda.

Puedes reescribir el texto de la consulta de las siguientes maneras:

  • Agrega el atributo android:searchMode a tu archivo de búsqueda de Terraform con el valor "queryRewriteFromText". En este caso, el contenido del SUGGEST_COLUMN_TEXT_1 de la sugerencia se usa para reescribir el texto de la consulta.
  • Agrega el atributo android:searchMode a tu archivo de búsqueda. de Terraform con el valor "queryRewriteFromData". En este caso, el contenido de la lista Se usa la columna SUGGEST_COLUMN_INTENT_DATA para reescribir la consulta texto. Usa esta opción únicamente con URIs u otros formatos de datos que vayan a ser visible para el usuario, como URLs HTTP. No uses esquemas de URI internos para reescribirlos la consulta de esta manera.
  • Proporciona una cadena de texto de consulta única en el Columna SUGGEST_COLUMN_QUERY de la tabla de sugerencias. Si esta está presente y contiene un valor para la sugerencia actual, es que se usa para reescribir el texto de la consulta y anular cualquiera de de Google Cloud.

Cómo exponer las sugerencias de búsqueda al cuadro de búsqueda rápida

Una vez que configures tu app para que proporcione sugerencias de búsqueda personalizadas disponibles para el cuadro de búsqueda rápida accesible a nivel global es tan fácil como modificar tu configuración de búsqueda para incluir android:includeInGlobalSearch por el valor "true"

La única situación en la que se necesita trabajo adicional es cuando tu contenido del proveedor exige un permiso de lectura. En ese caso, debes agregar <path-permission> para que el proveedor otorgue Quick Acceso de lectura del cuadro de búsqueda a tu proveedor de contenido, como se muestra a continuación ejemplo:

<provider android:name="MySuggestionProvider"
          android:authorities="com.example.MyCustomSuggestionProvider"
          android:readPermission="com.example.provider.READ_MY_DATA"
          android:writePermission="com.example.provider.WRITE_MY_DATA">
  <path-permission android:pathPrefix="/search_suggest_query"
                   android:readPermission="android.permission.GLOBAL_SEARCH" />
</provider>

En este ejemplo, el proveedor restringe el acceso de lectura y escritura al contenido. El elemento <path-permission> modifica la restricción por otorga acceso de lectura al contenido de "/search_suggest_query" de ruta de acceso cuando el permiso "android.permission.GLOBAL_SEARCH" existe. Otorga acceso al cuadro de búsqueda rápida para que pueda consultar tu contenido. de servicios para obtener sugerencias.

Si tu proveedor de contenido no aplica de manera forzosa los permisos de lectura, la Búsqueda rápida Box lo lee de forma predeterminada.

Habilitar sugerencias en un dispositivo

De forma predeterminada, las aplicaciones no están habilitadas para brindar sugerencias en el cuadro de búsqueda rápida. incluso si están configurados para hacerlo. El usuario decide si incluir sugerencias de tu aplicación en el cuadro de búsqueda rápida abriendo Disponible para búsquedas de elementos; se encuentra en Configuración > Search, y habilitar tus app como elemento de búsqueda.

Cada aplicación disponible para el cuadro de búsqueda rápida tiene una entrada en el Elementos de búsqueda. La entrada incluye el nombre de la app y una breve descripción del contenido que se puede buscar en la app disponible para las sugerencias en el cuadro de búsqueda rápida. Para definir el texto de la descripción para la app en la que se puede buscar, agrega android:searchSettingsDescription. a la configuración de búsqueda, como se muestra en el siguiente ejemplo:

<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
    android:label="@string/app_label"
    android:hint="@string/search_hint"
    android:searchSuggestAuthority="com.example.MyCustomSuggestionProvider"
    android:searchSuggestIntentAction="android.intent.action.VIEW"
    android:includeInGlobalSearch="true"
    android:searchSettingsDescription="@string/search_description" >
</searchable>

Haz que la cadena de android:searchSettingsDescription sea lo más concisa posible como sea posible y explica el contenido que se puede buscar. Por ejemplo, "Artistas, álbumes y pistas" para una app de música o "Notas guardadas" para una app de bloc de notas. Proporcionar esta descripción es importante para que el usuario sepa qué tipo de se proporcionan sugerencias. Incluye siempre este atributo cuando android:includeInGlobalSearch es verdadero.

Porque el usuario debe visitar el menú de configuración para habilitar las sugerencias de búsqueda para tu aplicación, si la búsqueda es un aspecto importante de tu aplicación, considera cómo transmitirlos a tus usuarios. Por ejemplo, podrías brindar una nota la primera vez un usuario inicia la app que explica cómo habilitar las sugerencias de búsqueda para Quick Cuadro de búsqueda.

Cómo administrar accesos directos a sugerencias del cuadro de búsqueda rápida

Las sugerencias que el usuario selecciona del cuadro de búsqueda rápida se pueden se convierten en atajos. Estas son sugerencias que el sistema copia de tu proveedor de contenido para que pueda acceder rápidamente a la sugerencia sin la necesidad de vuelve a consultar al proveedor de contenido.

De forma predeterminada, esta opción se habilita para todas las sugerencias que recupera la Búsqueda rápida. pero, si los datos de las sugerencias cambian con el tiempo, puedes solicitar que que los atajos se actualicen. Por ejemplo, si tus sugerencias hacen referencia a recursos datos, como el estado de presencia de un contacto, y luego solicita que la sugerencia los accesos directos se actualizarán cuando se muestren al usuario. Para ello, incluye el SUGGEST_COLUMN_SHORTCUT_ID en tu tabla de sugerencias. Puedes usar esta columna para configurar el comportamiento de la combinación de teclas para cada sugerencia en una de las de la siguiente manera:

  • Permite que el cuadro de búsqueda rápida vuelva a consultar al proveedor de contenido para obtener una actualización. del atajo de sugerencias.

    Proporciona un valor en la columna SUGGEST_COLUMN_SHORTCUT_ID para la sugerencia de que se vuelva a consultar para obtener una versión nueva cada vez que se active el código fuente. El acceso directo se muestra rápidamente con los datos más disponibles hasta que se muestra la consulta de actualización. A partir de ese momento, se actualiza con la información nueva. La consulta actualizada es enviados al proveedor de contenido con una ruta de URI de SUGGEST_URI_PATH_SHORTCUT, en lugar de SUGGEST_URI_PATH_QUERY

    Haz que el objeto Cursor que muestres contenga una sugerencia con el elemento mismas columnas que la sugerencia original o estar vacía, lo que indica que el el atajo ya no es válido; en ese caso, la sugerencia desaparecerá y se quita el atajo.

    Si una sugerencia se refiere a datos que pueden tardar más en actualizarse, como un actualización basada en la red, también puedes agregar SUGGEST_COLUMN_SPINNER_WHILE_REFRESHING a tu de sugerencias con un valor de verdadero para mostrar un ícono giratorio de progreso para el hasta que se complete la actualización. Cualquier valor distinto de true no muestra el ícono giratorio de progreso.

  • Evita que la sugerencia se copie en un acceso directo.

    Proporciona un valor de SUGGEST_NEVER_MAKE_SHORTCUT en los Columna SUGGEST_COLUMN_SHORTCUT_ID. En este caso, el la sugerencia nunca se copia en un atajo. Esto solo es necesario si no queremos que aparezca la sugerencia copiada anteriormente. Si proporcionar un valor normal para la columna y, luego, el atajo para sugerir solo aparece hasta que se muestra la consulta actualizada.

  • Permite que se aplique el comportamiento predeterminado de los accesos directos.

    Deja el campo SUGGEST_COLUMN_SHORTCUT_ID vacío para cada uno que no cambia y que se puede guardar como atajo.

Si ninguna de tus sugerencias cambia, no necesitas SUGGEST_COLUMN_SHORTCUT_ID.

Acerca de la clasificación de sugerencias del cuadro de búsqueda rápida

Cuando las sugerencias de búsqueda de la app estén disponibles en el cuadro de búsqueda rápida, haz lo siguiente: La clasificación del cuadro de búsqueda rápida determina cómo se muestran las sugerencias al usuario para una consulta en particular. Esto podría depender de cuántas otras apps tengan para esa consulta y con qué frecuencia el usuario selecciona tus resultados en comparación con los de otras apps. No podemos garantizarte el rendimiento de las sugerencias clasificados o si las sugerencias de tu app se muestran para una búsqueda determinada. En Proporcionar resultados de calidad aumenta la probabilidad de que el rendimiento de tu app en una posición destacada, y las apps que brindan es más probable que las sugerencias de baja calidad tengan una clasificación inferior o no se muestren.