Ao usar a caixa ou o widget de pesquisa do Android, você pode oferecer sugestões de pesquisa personalizadas que são criadas a partir de dados no seu app. Por exemplo: Se o app é um dicionário, é possível sugerir palavras do dicionário que corresponder ao texto inserido no campo de pesquisa antes que o usuário termine de inserir na consulta. Essas sugestões são valiosas porque podem prever com eficácia o que o usuário quer e fornece acesso instantâneo. A Figura 1 mostra um exemplo de uma caixa de diálogo de pesquisa com sugestões personalizadas.
Depois de fornecer sugestões personalizadas, você também pode disponibilizá-las para o Caixa de pesquisa rápida em todo o sistema, fornecendo acesso ao seu conteúdo de fora do app.
Antes de adicionar sugestões personalizadas, implemente a caixa de diálogo de pesquisa do Android ou uma widget de pesquisa para pesquisas no seu app. Consulte Criar uma interface de pesquisa e Conteúdo provedores.
Noções básicas
![](https://developer.android.google.cn/static/images/search/search-suggest-custom.png?authuser=0000&hl=pt-br)
Figura 1. Captura de tela de uma caixa de diálogo de pesquisa com sugestões de pesquisa personalizadas.
Quando o usuário seleciona uma sugestão personalizada, o sistema envia uma
Intent
para seu
atividade de pesquisa. Ao contrário de uma consulta de pesquisa normal que envia uma intent com o
ACTION_SEARCH
você pode definir suas sugestões personalizadas para usar
ACTION_VIEW
, ou
qualquer outra ação da intent, além de incluir dados relevantes para o
sugestão selecionada. No exemplo do dicionário, quando o usuário seleciona
sugestão, o aplicativo pode abrir imediatamente a definição da palavra, em vez
de pesquisar correspondências no dicionário.
Para fornecer sugestões personalizadas, siga estas etapas:
- Implemente uma atividade de pesquisa básica, conforme descrito em Crie uma interface de pesquisa.
- Modificar a configuração pesquisável com informações sobre o conteúdo um provedor de serviços que oferece sugestões personalizadas.
- Crie uma tabela, como em um
SQLiteDatabase
, para suas sugestões e formate a tabela com as colunas obrigatórias. - Crie um conteúdo provedor que tem acesso à tabela de sugestões e declare a no manifesto.
- Declare o tipo de
Intent
a ser enviado quando o usuário selecionar uma sugestão, incluindo uma ação personalizada e dados personalizados.
Assim como o sistema Android exibe a caixa de pesquisa, ele também exibe seu sugestões de pesquisa. Você precisa de um provedor de conteúdo a partir do qual o sistema possa recuperar suas sugestões. Lida Provedores de conteúdo para saber como criar um provedor de conteúdo.
Quando o sistema identifica que sua atividade é pesquisável e fornece sugestões de pesquisa, o procedimento a seguir ocorre quando o usuário digita um consulta:
- O sistema recebe o texto da consulta de pesquisa, ou seja, o que for inserido até agora, e executa uma consulta ao provedor de conteúdo, que gerencia sua sugestões.
- Seu provedor de conteúdo retorna um
Cursor
que aponte para todas as sugestões relevantes para a consulta de pesquisa em textos. - O sistema mostra a lista de sugestões do
Cursor
:
Depois que as sugestões personalizadas são exibidas, pode ocorrer o seguinte:
- Se o usuário inserir outra letra ou alterar a consulta de alguma forma, o as etapas anteriores se repetem e a lista de sugestões é atualizada.
- Se o usuário executar a pesquisa, as sugestões serão ignoradas e o
pesquisa é fornecido à sua atividade de pesquisa usando o
ACTION_SEARCH
. - Se o usuário selecionar uma sugestão, uma intent será enviada ao seu navegador atividade, carregando uma ação personalizada e dados personalizados para que o aplicativo possa abrir o conteúdo sugerido.
Modificar a configuração pesquisável
Para adicionar suporte a sugestões personalizadas, adicione o método
android:searchSuggestAuthority
ao
<searchable>
no seu arquivo de configuração pesquisável,
conforme mostrado neste exemplo:
<?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>
Talvez sejam necessários atributos adicionais, dependendo do tipo de intent que você anexar a cada sugestão e como você deseja formatar consultas para seu conteúdo de nuvem. Os outros atributos opcionais são discutidos a seguir em outras seções.
Criar um provedor de conteúdo
Para criar um provedor de conteúdo com sugestões personalizadas, primeiro consulte
Provedores de conteúdo
para saber como criar um provedor de conteúdo. Um provedor de conteúdo para
sugestões é semelhante a qualquer outro provedor de conteúdo. No entanto, para cada
sugestão fornecida, a respectiva linha no Cursor
precisa
incluir colunas específicas que o sistema entende e usa para formatar o
sugestões.
Quando o usuário digita na caixa de diálogo ou no widget de pesquisa, o sistema
consulta o provedor de conteúdo em busca de sugestões chamando
query()
sempre que uma letra é inserida. Na implementação de query()
,
o provedor de conteúdo deve pesquisar seus dados de sugestão e retornar um
Cursor
que aponta para as linhas que ele determina como boas
sugestões.
Detalhes sobre como criar um provedor de conteúdo para sugestões personalizadas são discutidos nas duas seções a seguir:
- Processar a consulta de sugestão
- Como o sistema envia solicitações para seu provedor de conteúdo e como lidar com elas para resolvê-los com rapidez.
- Criar uma tabela de sugestões
- Como definir as colunas que o sistema espera na
Cursor
retornados com cada consulta.
Processar a consulta de sugestão
Quando o sistema solicita sugestões do seu provedor de conteúdo, ele chama
método query()
do seu provedor de conteúdo. Implemente esse método para
pesquisar seus dados de sugestão e retornar um Cursor
apontando para o
sugestões que você considera relevantes.
Veja um resumo dos parâmetros que o sistema passa para o
query()
, listado em ordem:
uri
Sempre um conteúdo
Uri
, formatado como da seguinte forma:content://your.authority/optional.suggest.path/
SUGGEST_URI_PATH_QUERY
O comportamento padrão é o sistema transmitir esse URI e anexar a consulta texto a ela:
content://your.authority/optional.suggest.path/
SUGGEST_URI_PATH_QUERY
/puppiesO texto da consulta no final é codificado usando regras de codificação de URI, portanto você pode precisar decodificá-lo antes de realizar uma pesquisa.
A parte
optional.suggest.path
só está incluída nos o URI, se você definir esse caminho em seu arquivo de configuração pesquisável com o atributoandroid:searchSuggestPath
. Ela só é necessária se você usa o mesmo provedor de conteúdo para várias atividades de pesquisa. Se este for o caso, remova a ambiguidade da origem da consulta de sugestão.projection
- Sempre nulo.
selection
- O valor fornecido no campo
android:searchSuggestSelection
atributo do seu arquivo de configuração pesquisável, ou nulo se você não declarar o atributoandroid:searchSuggestSelection
. A seção seguinte discute isso mais a fundo.selectionArgs
- Contém a consulta de pesquisa como o primeiro e único elemento da matriz se você declara o atributo
android:searchSuggestSelection
sua configuração pesquisável. Se você não declararandroid:searchSuggestSelection
, esse parâmetro será nulo. A seção a seguir discute isso em mais detalhes.sortOrder
- Sempre nulo.
O sistema pode enviar o texto da consulta de pesquisa de duas maneiras. A maneira padrão é
para que o texto da consulta seja incluído como o último caminho do URI de conteúdo transmitido na
o parâmetro uri
. No entanto, se você incluir um valor de seleção
o android:searchSuggestSelection
da sua configuração pesquisável
, o texto da consulta passa como o primeiro elemento da
Matriz de strings selectionArgs
. Essas duas opções são descritas
a seguir.
Conseguir a consulta no URI
Por padrão, a consulta é anexada como o último segmento da uri
.
parâmetro: um objeto Uri
. Para recuperar o texto da consulta
caso, use
getLastPathSegment()
,
conforme mostrado neste exemplo:
Kotlin
val query: String = uri.lastPathSegment.toLowerCase()
Java
String query = uri.getLastPathSegment().toLowerCase();
Isso retorna o último segmento de Uri
, que é a consulta
o texto que o usuário digita.
Conseguir a consulta nos argumentos de seleção
Em vez de usar o URI, pode fazer mais sentido para o seu
query()
para receber tudo o que é necessário para realizar a
pesquisa, e talvez queira que selection
e
Parâmetros selectionArgs
para carregar os valores apropriados. Neste
caso, adicione o atributo android:searchSuggestSelection
ao seu
configuração pesquisável com sua string de seleção SQLite. Na seleção
inclua um ponto de interrogação (?) como marcador para o texto real
consulta de pesquisa. O sistema chama query()
com a string de seleção como
o parâmetro selection
e a consulta de pesquisa como o primeiro elemento
na matriz selectionArgs
.
Por exemplo, veja como você pode formar
Atributo android:searchSuggestSelection
para criar um texto completo
Instrução de pesquisa:
<?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>
Com essa configuração, o método query()
envia a
parâmetro selection
como "word MATCH ?"
e o
selectionArgs
como consulta de pesquisa. Quando você passa isso para
um SQLite
query()
e seus respectivos argumentos, eles são sintetizados
juntos, ou seja, o ponto de interrogação é substituído pelo texto da consulta. Se
você recebe consultas de sugestão dessa maneira e precisa adicionar curingas à consulta
texto, anexe-os ou prefixe-os ao parâmetro selectionArgs
, porque
esse valor fica entre aspas e inserido no lugar do ponto de interrogação.
Outro atributo no exemplo anterior é
android:searchSuggestIntentAction
, que define a ação da intent
enviadas com cada intent quando o usuário seleciona uma sugestão. Isso é discutido
mais adiante na seção Declarar uma intenção para
sugestões.
Criar uma tabela de sugestões
Quando você retorna sugestões ao sistema com uma Cursor
, a
sistema espera colunas específicas em cada linha. Não importa se você armazena
seus dados de sugestão em um banco de dados SQLite no dispositivo, um banco de dados em uma
servidor ou outro formato no dispositivo ou na Web, formate as sugestões como linhas
em uma tabela e apresentá-los com um Cursor
.
O sistema entende várias colunas, mas apenas duas delas são obrigatórias:
_ID
- Um ID único de linha de números inteiros para cada sugestão. O sistema exige isso
apresentar sugestões em uma
ListView
: SUGGEST_COLUMN_TEXT_1
- A string que é apresentada como uma sugestão.
As colunas a seguir são todas opcionais. A maioria é discutida mais adiante nas seções a seguir.
SUGGEST_COLUMN_TEXT_2
- Uma string. Se
Cursor
incluir essa coluna, todas as sugestões são fornecidas em um formato de duas linhas. A string desta coluna é exibido como uma segunda linha de texto menor abaixo da sugestão principal em textos. Ela pode ser nula ou vazia para indicar que não há texto secundário. SUGGEST_COLUMN_ICON_1
- Uma string de recurso drawable, de conteúdo ou de URI de arquivo. Se as
Cursor
incluir esta coluna, todas as sugestões serão fornecidas em um formato ícone mais texto com o ícone drawable no lado esquerdo. Isso pode ser nulo ou zero para indicar que não há ícone nessa linha. SUGGEST_COLUMN_ICON_2
- Uma string de recurso drawable, de conteúdo ou de URI de arquivo. Se as
Cursor
incluir esta coluna, todas as sugestões serão fornecidas em um formato ícone mais texto com o ícone do lado direito. Isso pode ser nulo ou zero para indicar que não há ícone nessa linha. SUGGEST_COLUMN_INTENT_ACTION
- Uma string de ação de intent. Se a coluna existir e contiver um valor no
linha determinada, a ação definida aqui é usada ao formar o atributo
intenção. Se o elemento não for fornecido, a ação será realizada no
android:searchSuggestIntentAction
na sua pesquisa configuração do Terraform. Se a ação for a mesma para todas as sugestões, a questão será mais eficiente para especificar a ação usandoandroid:searchSuggestIntentAction
e omita essa coluna. SUGGEST_COLUMN_INTENT_DATA
- String de URI de dados. Se a coluna existir e contiver um valor no
esses dados são usados ao formar a intent da sugestão. Se o elemento
não é fornecido, os dados são retirados do
android:searchSuggestIntentData
na sua pesquisa configuração do Terraform. Se nenhuma fonte for fornecida, o campo de dados da intent será nulo. Se seus dados forem os mesmos para todas as sugestões ou puderem ser descritos usando uma parte constante e um ID específico, é mais eficiente especificá-la usandoandroid:searchSuggestIntentData
e omitir . SUGGEST_COLUMN_INTENT_DATA_ID
- String de caminho de URI. Se a coluna existir e contiver um valor no
linha, depois "/" e esse valor é anexado ao campo de dados na intent.
Use-o apenas se o campo de dados especificado pelo
Atributo
android:searchSuggestIntentData
na pesquisa já está definida como uma string de base apropriada. SUGGEST_COLUMN_INTENT_EXTRA_DATA
- Dados arbitrários. Se essa coluna existir e contiver um valor em uma determinada linha,
esses são os dados extras usados ao formar a intent da sugestão.
Se não for informado, o campo de dados extra da intent será nulo. Essa coluna permite
sugestões fornecem dados adicionais que são incluídos como um extra na
da intent
EXTRA_DATA_KEY
de dados. SUGGEST_COLUMN_QUERY
- Se a coluna existir e o elemento existir na linha especificada, isso será
os dados que são usados ao formar a consulta da sugestão, incluídos como um
na linha de comando
QUERY
de dados. Ele será obrigatório se a ação da sugestão forACTION_SEARCH
. mas opcional em outros casos. SUGGEST_COLUMN_SHORTCUT_ID
- Só é usada ao fornecer sugestões para a caixa de pesquisa rápida. Esta coluna
indica se uma sugestão de pesquisa deve ser armazenada como um atalho e
se eles precisam ser validados. Os atalhos geralmente são formados quando o usuário
toca em uma sugestão da Caixa de pesquisa rápida. Se não definido, o resultado é armazenado como
um atalho e nunca é atualizado. Se for definido como
SUGGEST_NEVER_MAKE_SHORTCUT
, o resultado não será armazenado como um atalho. Caso contrário, o ID de atalho será usado para confira uma sugestão atualizada usandoSUGGEST_URI_PATH_SHORTCUT
: SUGGEST_COLUMN_SPINNER_WHILE_REFRESHING
- Só é usada ao fornecer sugestões para a caixa de pesquisa rápida. Esta coluna
especifica que um ícone de carregamento deve ser mostrado em vez de um ícone de
SUGGEST_COLUMN_ICON_2
, enquanto o atalho dessa sugestão está atualizando na Caixa de pesquisa rápida.
A maioria dessas colunas será discutida mais detalhadamente nas próximas seções.
Declarar uma intent para sugestões
Quando o usuário seleciona uma sugestão da lista que aparece abaixo do
na caixa de diálogo ou no widget de pesquisa, o sistema enviará um Intent
personalizado ao seu
atividade de pesquisa. Defina a ação e os dados para a intent.
Declarar a ação de intent
A ação de intent mais comum para uma sugestão personalizada é
ACTION_VIEW
, que é adequado quando você quer abrir algo,
como a definição de uma palavra, as informações de contato de uma pessoa ou uma página da Web.
No entanto, a ação da intent pode ser qualquer outra ação e pode ser diferente para cada
sugestão.
Se você quiser que todas as sugestões usem a mesma ação da intent, é possível definir a ação de duas maneiras:
- Use o atributo
android:searchSuggestIntentAction
da sua de configuração pesquisável para definir a ação de todas as sugestões, como como mostrado no exemplo a seguir:<?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>
- Use a coluna
SUGGEST_COLUMN_INTENT_ACTION
para definir ação para sugestões individuais. Para fazer isso, adicione o valor-chaveSUGGEST_COLUMN_INTENT_ACTION
coluna à sua tabela de sugestões e, para cada sugestão, coloque a ação a ser usada, como"android.intent.action.VIEW"
.
Você também pode combinar essas duas técnicas. Por exemplo, é possível incluir
Atributo android:searchSuggestIntentAction
com uma ação a ser
usada com todas as sugestões por padrão e, em seguida, substituir essa ação por algumas
sugestões ao declarar uma ação diferente no
SUGGEST_COLUMN_INTENT_ACTION
. Se você não incluir um valor
na coluna SUGGEST_COLUMN_INTENT_ACTION
, a intent
fornecido no atributo android:searchSuggestIntentAction
é
usados.
Declarar dados de intent
Quando o usuário seleciona uma sugestão, sua atividade de pesquisa recebe o
com a ação definida (conforme discutido na seção anterior
seção, mas a intent também precisa transportar dados para que a atividade identifique
qual sugestão será selecionada. Especificamente, os dados devem ser algo único
para cada sugestão, como o ID da linha da sugestão na sua tabela SQLite.
Quando a intent é recebida, é possível recuperar os dados anexados com
getData()
ou
getDataString()
.
É possível definir os dados incluídos no intent de duas maneiras:
- Defina os dados para cada sugestão dentro do
SUGGEST_COLUMN_INTENT_DATA
da sua tabela de sugestões.Fornecer todas as informações de dados necessárias para cada intent nas sugestões tabela incluindo a coluna
SUGGEST_COLUMN_INTENT_DATA
e e, em seguida, preenchê-lo com dados exclusivos para cada linha. Os dados desta coluna está anexada à intent exatamente como você a define nesta coluna. Você pode e recupere-a comgetData()
ougetDataString()
. - Fragmentar um URI de dados em duas partes: a parte comum a todas as sugestões.
e a parte exclusiva de cada sugestão. Coloque essas peças no
Atributo
android:searchSuggestintentData
da pesquisa e a colunaSUGGEST_COLUMN_INTENT_DATA_ID
do sua tabela de sugestões, respectivamente.O exemplo a seguir mostra como declarar a parte do URI que é comum a todas as sugestões na
android:searchSuggestIntentData
do seu atributo pesquisável configuração:<?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>
Inclua o caminho final de cada sugestão (a parte exclusiva) na a coluna
SUGGEST_COLUMN_INTENT_DATA_ID
das suas sugestões tabela. Quando o usuário seleciona uma sugestão, o sistema pega a string deandroid:searchSuggestIntentData
, anexa uma barra (/), e, em seguida, adiciona o respectivo valor doSUGGEST_COLUMN_INTENT_DATA_ID
para formar uma tabela de conteúdo completo URI. Em seguida, você pode recuperar oUri
comgetData()
.
Adicionar mais dados
Se você precisar expressar mais informações com sua intent, poderá adicionar outro
coluna da tabela, como SUGGEST_COLUMN_INTENT_EXTRA_DATA
, que pode
armazenar informações adicionais sobre a sugestão. Os dados salvos nesta coluna
é colocado no EXTRA_DATA_KEY
do pacote extra da intent.
Processar a intent
Depois de fornecer sugestões de pesquisa personalizadas com intents personalizadas, você precisa
sua atividade de pesquisa para lidar com essas intents quando o usuário seleciona
sugestão. Isso além de processar o ACTION_SEARCH
o que sua atividade de pesquisa já faz. Aqui está um exemplo de como
é possível processar os intents durante o
onCreate()
callback:
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); }
Neste exemplo, a ação da intent é ACTION_VIEW
, e os dados
carrega um URI completo que aponta para o item sugerido, conforme sintetizado pelo
a string android:searchSuggestIntentData
e
SUGGEST_COLUMN_INTENT_DATA_ID
. Em seguida, o URI passa para a
método showResult()
local que consulta o provedor de conteúdo para
item especificado pelo URI.
Reescrever o texto da consulta
Por padrão, se o usuário navegar pela lista de sugestões usando controles direcionais, como com um trackball ou botão direcional, o texto da consulta não atualizar. No entanto, você pode reescrever temporariamente o texto da consulta do usuário como ele aparece na caixa de texto com uma consulta que corresponda à sugestão em foco. Assim, o usuário vê a consulta sendo sugerida e pode selecionar a caixa de pesquisa e editar a consulta antes de despachá-la como uma busca.
Você pode reescrever o texto da consulta das seguintes maneiras:
- Adicione o atributo
android:searchMode
à sua campanha com o valor"queryRewriteFromText"
. Neste caso, o conteúdo doSUGGEST_COLUMN_TEXT_1
da sugestão é usada para reescrever o texto da consulta. - Adicione o atributo
android:searchMode
à sua conta pesquisável com o valor"queryRewriteFromData"
. Neste caso, o conteúdo da sugestão A colunaSUGGEST_COLUMN_INTENT_DATA
é usada para reescrever a consulta. em textos. Use-o apenas com URIs ou outros formatos de dados destinados a visíveis ao usuário, como URLs HTTP. Não use esquemas de URI internos para reescrever a consulta dessa forma. - Forneça uma string de texto de consulta exclusiva no
SUGGEST_COLUMN_QUERY
da sua tabela de sugestões. Se esse estiver presente e contiver um valor para a sugestão atual, será usada para reescrever o texto da consulta e substituir as e implementações.
Expor sugestões de pesquisa para a caixa de pesquisa rápida
Depois de configurar seu app para fornecer sugestões de pesquisa personalizadas, tornando-as
disponível para a Caixa de pesquisa rápida acessível globalmente é tão fácil quanto modificar
sua configuração pesquisável para incluir
android:includeInGlobalSearch
com o valor.
"true"
.
O único cenário em que é necessário mais trabalho é quando seu conteúdo
o provedor exige uma permissão de leitura. Nesse caso, você precisa adicionar um
<path-permission>
para o provedor conceder acesso a Quick
Acesso de leitura da caixa de pesquisa ao seu provedor de conteúdo, conforme mostrado abaixo
exemplo:
<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>
Nesse exemplo, o provedor restringe o acesso de leitura e gravação ao conteúdo.
O elemento <path-permission>
altera a restrição ao
concedendo acesso de leitura ao conteúdo dentro da "/search_suggest_query"
o prefixo do caminho de conversão quando a permissão "android.permission.GLOBAL_SEARCH"
existe. Concede acesso à caixa de pesquisa rápida para que ela possa consultar seu conteúdo
provedor para sugestões.
Caso seu provedor de conteúdo não aplique permissões de leitura, a Pesquisa rápida O Box lê esse valor por padrão.
Ativar sugestões em um dispositivo
Por padrão, os aplicativos não estão habilitados para fornecer sugestões na Caixa de pesquisa rápida, mesmo que elas estejam configuradas para isso. O usuário escolhe se quer incluir sugestões do seu app na caixa de pesquisa rápida abrindo Pesquisável itens: em Configurações > Pesquisa e ativar aplicativo como um item pesquisável.
Cada aplicativo disponível para a Caixa de pesquisa rápida tem uma entrada no
Itens pesquisáveis. A entrada inclui o nome do app
e uma breve descrição do conteúdo que pode ser pesquisado no aplicativo
disponível para sugestões na Caixa de pesquisa rápida. Definir o texto da descrição
para seu app pesquisável, adicione o android:searchSettingsDescription
à sua configuração pesquisável, conforme mostrado no
exemplo:
<?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>
A string de android:searchSettingsDescription
precisa ser concisa
possível e informar o conteúdo pesquisável. Por exemplo, "Artistas,
álbuns e faixas" para um app de música ou em "Notas salvas" para um aplicativo de bloco de notas.
Fornecer essa descrição é importante para que o usuário saiba que tipo de
sugestões serão fornecidas. Sempre inclua este atributo quando
android:includeInGlobalSearch
é verdadeiro.
Porque o usuário precisa visitar o menu de configurações para ativar as sugestões de pesquisa para seu app. Se a pesquisa for um aspecto importante, considere como transmitir isso aos usuários. Por exemplo, você pode fornecer uma nota na primeira vez Um usuário abre o app que explica como ativar as sugestões de pesquisa para o Quick Caixa de pesquisa.
Gerenciar atalhos de sugestões da caixa de pesquisa rápida
Sugestões que o usuário seleciona na caixa de pesquisa rápida podem ser automaticamente transformados em atalhos. Essas são as sugestões que o sistema copia do seu provedor de conteúdo para que ele possa acessar rapidamente a sugestão sem precisar consulte novamente o provedor de conteúdo.
Por padrão, essa opção é ativada para todas as sugestões recuperadas pela Pesquisa rápida
Box, mas se os dados de sua sugestão mudarem com o passar do tempo, você poderá solicitar que
os atalhos serão atualizados. Por exemplo, se suas sugestões se referirem a recursos
dados, tais como o status de presença de um contato e, em seguida, solicitar que a sugestão
atalhos serão atualizados quando exibidos ao usuário. Para fazer isso, inclua o parâmetro
SUGGEST_COLUMN_SHORTCUT_ID
na sua tabela de sugestões. Você pode usar
coluna para configurar o comportamento dos atalhos de cada sugestão em um dos
da seguinte maneira:
Faça com que a Caixa de pesquisa rápida consulte novamente o seu provedor de conteúdo para obter uma nova do atalho de sugestão.
Forneça um valor na coluna
SUGGEST_COLUMN_SHORTCUT_ID
para a sugestão de ser consultado novamente para obter uma nova versão sempre que o atalho é exibido. O atalho aparece rapidamente com os dados mais disponível recentemente até que a consulta de atualização retorne, e nesse momento a sugestão é atualizada com as novas informações. A consulta de atualização enviado ao provedor de conteúdo com um caminho de URI deSUGGEST_URI_PATH_SHORTCUT
, em vez deSUGGEST_URI_PATH_QUERY
.Faça com que o
Cursor
retornado contenha uma sugestão usando o mesmas colunas que a sugestão original ou estar vazias, indicando que a não é mais válido. Nesse caso, a sugestão desaparece e o atalho será removido.Se uma sugestão se referir a dados que podem demorar mais para serem atualizados, como atualização baseada em rede, também é possível adicionar
SUGGEST_COLUMN_SPINNER_WHILE_REFRESHING
à sua Tabela de sugestões com um valor "true" para mostrar um ícone de carregamento de progresso para o ícone da direita até que a atualização seja concluída. Qualquer valor diferente de "true" não mostra o ícone de carregamento de progresso.Impede que a sugestão seja copiada em um atalho.
Informe um valor de
SUGGEST_NEVER_MAKE_SHORTCUT
no atributoSUGGEST_COLUMN_SHORTCUT_ID
. Nesse caso, o sugestão nunca é copiada para um atalho. Isso só será necessário se você não quer que a sugestão copiada anteriormente apareça. Se você fornecer um valor normal para a coluna, e o atalho de sugestão aparecerá somente até o retorno da consulta de atualização.Permita que o comportamento de atalho padrão seja aplicado.
Deixe o campo
SUGGEST_COLUMN_SHORTCUT_ID
vazio para cada sugestão que não muda e que pode ser salva como um atalho.
Se nenhuma de suas sugestões mudar, você não precisa da
SUGGEST_COLUMN_SHORTCUT_ID
.
Sobre a classificação de sugestões da caixa de pesquisa rápida
Depois de disponibilizar as sugestões de pesquisa do app para a Caixa de pesquisa rápida, a classificação da Caixa de pesquisa rápida determina como as sugestões são exibidas ao usuário para uma consulta específica. Isso pode depender de quantos outros apps resultados para essa consulta e com que frequência o usuário seleciona seus resultados em comparação com e os de outros apps. Não há garantia de como suas sugestões serão ou se as sugestões do seu app aparecem para uma determinada consulta. Em Em geral, fornecer resultados de qualidade aumenta a probabilidade as sugestões são fornecidas em uma posição de destaque, e os apps que oferecem sugestões de baixa qualidade têm mais probabilidade de serem classificadas em posição inferior ou não serem exibidas.