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
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:
- 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.
- Tu proveedor de contenido devuelve un
Cursor
que apunta a todas las sugerencias relevantes para la búsqueda texto. - 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:
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
/puppiesEl 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 atributoandroid: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.projection
- Siempre es nulo.
selection
- Es el valor proporcionado en
android:searchSuggestSelection
. del archivo de configuración de búsqueda, o un valor nulo si no declarar el atributoandroid:searchSuggestSelection
El en la siguiente sección.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 declarasandroid:searchSuggestSelection
, entonces este parámetro es nulo. En la siguiente sección, se analiza este tema con más detalle.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 usandoandroid: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 usandoandroid: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 esACTION_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 medianteSUGGEST_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 ColumnaSUGGEST_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 congetData()
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 columnaSUGGEST_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 delandroid:searchSuggestIntentData
, agrega una barra diagonal (/), y, luego, agrega el valor respectivo deSUGGEST_COLUMN_INTENT_DATA_ID
para formar un contenido completo URI Luego, puedes recuperar el objetoUri
congetData()
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 delSUGGEST_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 columnaSUGGEST_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 deSUGGEST_URI_PATH_SHORTCUT
, en lugar deSUGGEST_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 ColumnaSUGGEST_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.