Adicionar sugestões de pesquisa personalizadas

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

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:

  1. 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.
  2. Seu provedor de conteúdo retorna um Cursor que aponte para todas as sugestões relevantes para a consulta de pesquisa em textos.
  3. 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:

  1. 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/puppies
    

    O 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 atributo android: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.

  2. projection
    Sempre nulo.
  3. 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 atributo android:searchSuggestSelection. A seção seguinte discute isso mais a fundo.
  4. 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 declarar android:searchSuggestSelection, esse parâmetro será nulo. A seção a seguir discute isso em mais detalhes.
  5. 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 usando android: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 usando android: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 for ACTION_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 usando SUGGEST_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-chave SUGGEST_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 com getData() ou getDataString().

  • 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 coluna SUGGEST_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 de android:searchSuggestIntentData, anexa uma barra (/), e, em seguida, adiciona o respectivo valor do SUGGEST_COLUMN_INTENT_DATA_ID para formar uma tabela de conteúdo completo URI. Em seguida, você pode recuperar o Uri com getData().

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 do SUGGEST_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 coluna SUGGEST_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 de SUGGEST_URI_PATH_SHORTCUT, em vez de SUGGEST_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 atributo SUGGEST_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.