Aggiungi suggerimenti di ricerca personalizzati

Quando utilizzi la finestra di dialogo di ricerca di Android o il widget di ricerca, puoi fornire suggerimenti di ricerca personalizzati creati dai dati nella tua app. Ad esempio: Se la tua app è un dizionario, puoi suggerire parole del dizionario che corrisponde al testo inserito nel campo di ricerca prima che l'utente finisca di inserire la query. Questi suggerimenti sono preziosi perché possono prevedere in modo efficace ciò che l'utente vuole e dargli accesso immediato. La Figura 1 mostra un esempio di una finestra di dialogo di ricerca con suggerimenti personalizzati.

Una volta forniti suggerimenti personalizzati, puoi anche renderli disponibili al casella di ricerca rapida a livello di sistema, che ti consente di accedere ai tuoi contenuti dall'esterno del tuo dell'app.

Prima di aggiungere suggerimenti personalizzati, implementa la finestra di dialogo di ricerca di Android o una widget di ricerca per le ricerche nella tua app. Consulta la sezione Creare un'interfaccia di ricerca e Contenuti di terze parti.

Nozioni di base

Figura 1. Screenshot di una finestra di dialogo di ricerca con suggerimenti di ricerca personalizzati.

Quando l'utente seleziona un suggerimento personalizzato, il sistema invia un Intent al tuo attività di ricerca. A differenza di una normale query di ricerca che invia un intent con ACTION_SEARCH , puoi definire i suggerimenti personalizzati da utilizzare ACTION_VIEW—o qualsiasi altra azione intenti a eseguire l'azione e includere anche i dati pertinenti suggerimento selezionato. Nell'esempio del dizionario, quando l'utente seleziona una suggerito, l'app può aprire immediatamente la definizione della parola, di cercare corrispondenze nel dizionario.

Per fornire suggerimenti personalizzati, procedi nel seguente modo:

  • Implementare un'attività di ricerca di base, come descritto in Crea un'interfaccia di ricerca.
  • Modifica la configurazione disponibile per la ricerca con informazioni sui contenuti che fornisce suggerimenti personalizzati.
  • Crea una tabella, ad esempio in un SQLiteDatabase, per i tuoi suggerimenti e formatta la tabella con le colonne obbligatorie.
  • Crea un contenuti provider che ha accesso alla tua tabella dei suggerimenti e dichiarare provider nel tuo file manifest.
  • Dichiara il tipo di Intent da inviare quando l'utente seleziona un suggerimento, tra cui un'azione personalizzata e dati personalizzati.

Così come il sistema Android mostra la finestra di dialogo di ricerca, mostra anche i tuoi suggerimenti di ricerca. È necessario un fornitore di contenuti da cui il sistema possa recupera i tuoi suggerimenti. Letto Fornitori di contenuti per scoprire come creare un fornitore di contenuti.

Quando il sistema rileva che la tua attività è disponibile per la ricerca e fornisce suggerimenti di ricerca, la seguente procedura ha luogo quando l'utente inserisce un query:

  1. Il sistema prende il testo della query di ricerca, ovvero quello che è stato inserito finora ed esegue una query al fornitore di contenuti che gestisce i tuoi suggerimenti.
  2. Il tuo fornitore di contenuti restituisce un Cursor che rimanda a tutti i suggerimenti pertinenti alla query di ricerca testo.
  3. Il sistema visualizza l'elenco dei suggerimenti forniti Cursor.

Quando vengono visualizzati i suggerimenti personalizzati, potrebbe verificarsi quanto segue:

  • Se l'utente inserisce un'altra lettera o modifica in qualsiasi modo la query, la i passaggi precedenti vengono ripetuti e l'elenco di suggerimenti viene aggiornato di conseguenza.
  • Se l'utente esegue la ricerca, i suggerimenti vengono ignorati e la la ricerca viene fornita alla tua attività di ricerca utilizzando la normale Intenzione ACTION_SEARCH.
  • Se l'utente seleziona un suggerimento, viene inviato un intent alla tua ricerca attività, con un'azione personalizzata e dati personalizzati in modo che l'app possa aprirsi i contenuti suggeriti.

Modifica la configurazione disponibile per la ricerca

Per aggiungere il supporto per i suggerimenti personalizzati, aggiungi il android:searchSuggestAuthority al <searchable> elemento nel file di configurazione disponibile per la ricerca, come mostrato nell'esempio seguente:

<?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>

Potrebbero essere necessari attributi aggiuntivi, a seconda del tipo di intenzione allega a ogni suggerimento e come vuoi formattare le query per i tuoi contenuti. o il provider di servizi di terze parti. Gli altri attributi facoltativi sono discussi di seguito sezioni.

Crea un fornitore di contenuti

Per creare un fornitore di contenuti per suggerimenti personalizzati, consulta innanzitutto Fornitori di contenuti per scoprire come creare un fornitore di contenuti. Un fornitore di contenuti per suggerimenti è simile a quello di qualsiasi altro fornitore di contenuti. Tuttavia, per ogni suggerimento che fornisci, la rispettiva riga in Cursor deve includere colonne specifiche che il sistema comprende e utilizza per formattare suggerimenti.

Quando l'utente inserisce testo nella finestra di dialogo di ricerca o nel widget di ricerca, il sistema chiede suggerimenti al fornitore di contenuti chiamando query() ogni volta che viene inserita una lettera. Nella tua implementazione di query(), il fornitore di contenuti deve cercare i dati dei suggerimenti e restituire un Cursor che punta alle righe che ritiene siano buone suggerimenti.

I dettagli relativi alla creazione di un fornitore di contenuti per i suggerimenti personalizzati sono trattate nelle due sezioni seguenti:

Gestire la query di suggerimento
In che modo il sistema invia le richieste al tuo fornitore di contenuti e come gestirle che li rappresentano.
Creare una tabella dei suggerimenti
Come definire le colonne che il sistema prevede nella Cursor restituito per ogni query.

Gestire la query di suggerimento

Quando il sistema richiede suggerimenti al tuo fornitore di contenuti, metodo query() del tuo fornitore di contenuti. Implementa questo metodo per cercare i dati dei suggerimenti e restituire un Cursor che rimanda a i suggerimenti che ritieni pertinenti.

Ecco un riepilogo dei parametri che il sistema passa Metodo query(), elencato in ordine:

  1. uri

    Sempre un contenuto Uri, formattato come che segue:

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

    Il comportamento predefinito prevede che il sistema passi questo URI e aggiunga la query testo:

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

    Il testo della query alla fine è codificato utilizzando le regole di codifica URI, quindi potresti devono decodificarli prima di eseguire una ricerca.

    La parte optional.suggest.path è inclusa solo in l'URI se imposti un percorso di questo tipo nel file di configurazione disponibile per la ricerca con l'attributo android:searchSuggestPath. È necessaria solo se utilizzi lo stesso fornitore di contenuti per più attività disponibili per la ricerca. Se In questo caso, occorre distinguere l'origine della query di suggerimento.

  2. projection
    Sempre null.
  3. selection
    Il valore specificato nei android:searchSuggestSelection del file di configurazione disponibile per la ricerca o nullo se non dichiarare l'attributo android:searchSuggestSelection. La nella sezione che segue approfondisce l'argomento.
  4. selectionArgs
    Contiene la query di ricerca come primo e unico elemento dell'array se dichiari l'attributo android:searchSuggestSelection la configurazione disponibile per la ricerca. Se non dichiari android:searchSuggestSelection, questo parametro è nullo. Questa sezione viene approfondita nella sezione che segue.
  5. sortOrder
    Sempre null.

Il sistema può inviarti il testo della query di ricerca in due modi. Il metodo predefinito è per includere il testo della query come ultimo percorso dell'URI dei contenuti passato il parametro uri. Tuttavia, se includi un valore di selezione android:searchSuggestSelection della configurazione disponibile per la ricerca , il testo della query passa invece come primo elemento della Array di stringa selectionArgs. Queste due opzioni sono descritte a questo punto.

Recupera la query nell'URI

Per impostazione predefinita, la query viene aggiunta come ultimo segmento di uri è un oggetto Uri. Per recuperare il testo della query caso, utilizzare getLastPathSegment(), come mostrato nell'esempio seguente:

Kotlin

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

Java

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

Restituisce l'ultimo segmento di Uri, ovvero la query il testo inserito dall'utente.

Ottieni la query negli argomenti di selezione

Invece di utilizzare l'URI, potrebbe essere più utile per i tuoi query() per ricevere tutto il necessario per eseguire cercare e potresti volere selection e selectionArgs affinché abbiano i valori appropriati. In questo in caso di necessità, aggiungi l'attributo android:searchSuggestSelection disponibile per la ricerca con la stringa di selezione SQLite. Nella selezione stringa, includi un punto interrogativo (?) come segnaposto per la stringa query di ricerca. Il sistema chiama query() con la stringa di selezione come Il parametro selection e la query di ricerca come primo elemento nell'array selectionArgs.

Ad esempio, ecco come potresti formare Attributo android:searchSuggestSelection per creare un testo completo istruzione di ricerca:

<?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 questa configurazione, il metodo query() invia selection come "word MATCH ?" e il parametro selectionArgs come query di ricerca. Quando li passi a una SQLite query() che, come rispettivi argomenti, sono sintetizzati nel senso che il punto interrogativo viene sostituito con il testo della query. Se ricevi query di suggerimenti in questo modo e devi aggiungere caratteri jolly alla query di testo, aggiungerli o anteponirli al parametro selectionArgs, perché questo valore è racchiuso tra virgolette e inserito al posto del punto interrogativo.

Un altro attributo nell'esempio precedente è android:searchSuggestIntentAction, che definisce l'azione per intent inviati con ogni intent quando l'utente seleziona un suggerimento. Questo argomento verrà discusso più avanti nella sezione Dichiarare un intento suggerimenti.

Crea una tabella dei suggerimenti

Quando restituisci suggerimenti al sistema con un Cursor, del sistema prevede colonne specifiche in ogni riga. A prescindere dal fatto che i dati dei suggerimenti in un database SQLite sul dispositivo, un database su una server o in un altro formato sul dispositivo o sul web, formatta i suggerimenti come righe in una tabella e presenta loro un Cursor.

Il sistema riconosce diverse colonne, ma solo due sono obbligatorie:

_ID
Un ID riga di un numero intero univoco per ogni suggerimento. Il sistema richiede questa presenta suggerimenti in un ListView.
SUGGEST_COLUMN_TEXT_1
La stringa visualizzata come suggerimento.

Le seguenti colonne sono tutte facoltative. La maggior parte viene discussa più in dettaglio le sezioni seguenti.

SUGGEST_COLUMN_TEXT_2
Una stringa. Se Cursor include questa colonna, allora tutti vengono forniti in formato a due righe. La stringa in questa colonna è visualizzata come una seconda riga di testo più piccola sotto il suggerimento principale testo. Può essere nullo o vuoto per non indicare alcun testo secondario.
SUGGEST_COLUMN_ICON_1
Una stringa risorsa di cui è possibile eseguire il codice, contenuti o URI del file. Se le tue Cursor include questa colonna, vengono forniti tutti i suggerimenti in formato icona più testo con l'icona disegnabile sul lato sinistro. Questo può essere nullo o zero per indicare che non è presente alcuna icona in questa riga.
SUGGEST_COLUMN_ICON_2
Una stringa risorsa di cui è possibile eseguire il codice, contenuti o URI del file. Se le tue Cursor include questa colonna, vengono forniti tutti i suggerimenti in formato icona più testo con l'icona sul lato destro. Può essere nullo o zero per indicare che non è presente alcuna icona in questa riga.
SUGGEST_COLUMN_INTENT_ACTION
Una stringa di azioni per intent. Se questa colonna esiste e contiene un valore al una data riga, l'azione definita qui viene utilizzata quando si forma la query l'intento. Se l'elemento non viene fornito, l'azione viene eseguita dalla Campo android:searchSuggestIntentAction nel campo Ricerca configurazione. Se la tua azione è la stessa per tutti i suggerimenti, sarà più specificare l'azione utilizzando android:searchSuggestIntentAction e ometti questa colonna.
SUGGEST_COLUMN_INTENT_DATA
Una stringa URI di dati. Se questa colonna esiste e contiene un valore al valore , questi dati vengono utilizzati al momento di creare l'intent del suggerimento. Se l'elemento non viene fornito, i dati vengono recuperati Campo android:searchSuggestIntentData nel campo Ricerca configurazione. Se non viene fornita nessuna delle due origini, il campo dei dati dell'intent viene null. Se i dati sono gli stessi per tutti i suggerimenti o possono essere descritti utilizzando una parte costante e un ID specifico, è più efficiente specificarlo utilizzando android:searchSuggestIntentData e ometti questo colonna.
SUGGEST_COLUMN_INTENT_DATA_ID
Una stringa del percorso dell'URI. Se questa colonna esiste e contiene un valore al valore riga, quindi "/" e questo valore viene aggiunto al campo dati nell'intent. Da utilizzare solo se il campo di dati specificato Attributo android:searchSuggestIntentData nella categoria Ricercabile è già impostata su una stringa di base appropriata.
SUGGEST_COLUMN_INTENT_EXTRA_DATA
Dati arbitrari. Se questa colonna esiste e contiene un valore in una determinata riga, si tratta dei dati aggiuntivi utilizzati per formare l'intent del suggerimento. Se non viene fornito, il campo dati aggiuntivo dell'intent sarà nullo. Questa colonna consente di forniscono dati aggiuntivi che sono inclusi come extra intent EXTRA_DATA_KEY chiave.
SUGGEST_COLUMN_QUERY
Se questa colonna esiste e questo elemento esiste nella riga specificata, si tratta di i dati utilizzati per creare la query del suggerimento, inclusi come extra nell'intent QUERY chiave. È necessaria se l'azione del suggerimento è ACTION_SEARCH. ma in tutti gli altri casi è facoltativo.
SUGGEST_COLUMN_SHORTCUT_ID
Utilizzato solo quando vengono forniti suggerimenti per la Casella di ricerca rapida. Questa colonna indica se un suggerimento di ricerca deve essere memorizzato come scorciatoia e se deve essere convalidato. In genere le scorciatoie vengono formate quando l'utente tocca un suggerimento della Casella di ricerca rapida. Se non è presente, il risultato viene archiviato come una scorciatoia e non è mai stata aggiornata. Se impostato su SUGGEST_NEVER_MAKE_SHORTCUT, il risultato non viene memorizzato come scorciatoia. Altrimenti, l'ID della scorciatoia viene utilizzato controlla se è disponibile un suggerimento aggiornato utilizzando SUGGEST_URI_PATH_SHORTCUT.
SUGGEST_COLUMN_SPINNER_WHILE_REFRESHING
Utilizzato solo quando vengono forniti suggerimenti per la Casella di ricerca rapida. Questa colonna specifica che è necessario mostrare una rotellina al posto dell'icona SUGGEST_COLUMN_ICON_2 mentre la scorciatoia di questo suggerimento è viene aggiornato nella Casella di ricerca rapida.

La maggior parte di queste colonne viene discussa più in dettaglio nelle sezioni seguenti.

Dichiara un'intenzione per i suggerimenti

Quando l'utente seleziona un suggerimento dall'elenco visualizzato sotto la finestra di dialogo o widget di ricerca, il sistema invia un Intent personalizzato al tuo attività di ricerca. Devi definire l'azione e i dati relativi all'intent.

Dichiara l'azione intent

L'azione intent più comune per un suggerimento personalizzato è ACTION_VIEW, che è adatta per aprire qualcosa, come la definizione di una parola, le informazioni di contatto di una persona o una pagina web. Tuttavia, l'azione intent può essere qualsiasi altra azione e può essere diversa per suggerimento.

A seconda che tu voglia che tutti i suggerimenti utilizzino la stessa azione intent, puoi definire l'azione in due modi:

  • Utilizza l'attributo android:searchSuggestIntentAction di file di configurazione disponibile per la ricerca per definire l'azione per tutti i suggerimenti, come mostrato nell'esempio seguente:
    <?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>
    
  • Utilizza la colonna SUGGEST_COLUMN_INTENT_ACTION per definire per i singoli suggerimenti. Per farlo, aggiungi il parametro SUGGEST_COLUMN_INTENT_ACTION colonna alla tabella dei suggerimenti e, per ogni suggerimento, inserisci l'azione da utilizzare, ad esempio "android.intent.action.VIEW".

Puoi anche combinare queste due tecniche. Ad esempio, puoi includere Attributo android:searchSuggestIntentAction con un'azione da usata con tutti i suggerimenti per impostazione predefinita, poi sostituisci questa azione per alcuni di testo dichiarando un'azione diversa SUGGEST_COLUMN_INTENT_ACTION. Se non includi un valore nella colonna SUGGEST_COLUMN_INTENT_ACTION, l'intent specificato nell'attributo android:searchSuggestIntentAction è in uso.

Dichiara i dati sull'intenzione

Quando l'utente seleziona un suggerimento, la tua attività di ricerca riceve lo l'intenzione con l'azione da te definita, come discusso nel ma l'intent deve anche trasferire dati affinché la tua attività possa identificare il suggerimento selezionato. Nello specifico, i dati devono essere univoci per ogni suggerimento, ad esempio l'ID riga del suggerimento nella tabella SQLite. Una volta ricevuto l'intent, puoi recuperare i dati allegati con getData() o getDataString().

Puoi definire i dati inclusi con l'intent in due modi:

  • Definisci i dati per ogni suggerimento all'interno del SUGGEST_COLUMN_INTENT_DATA della tabella dei suggerimenti.

    Fornisci tutte le informazioni dei dati necessarie per ogni intent nei suggerimenti includendo la colonna SUGGEST_COLUMN_INTENT_DATA e e poi compilarlo con dati univoci per ogni riga. I dati di questa colonna è associato all'intent esattamente come lo definisci in questa colonna. Puoi quindi recuperalo con getData() o getDataString().

  • Frammenta un URI di dati in due parti: la parte comune a tutti i suggerimenti e la parte univoca per ogni suggerimento. Posiziona queste parti nel Attributo android:searchSuggestintentData dell'elemento disponibile per la ricerca e la colonna SUGGEST_COLUMN_INTENT_DATA_ID di la tabella dei suggerimenti.

    L'esempio seguente mostra come dichiarare la parte dell'URI comune a tutti i suggerimenti nel Attributo android:searchSuggestIntentData del tuo configurazione:

      <?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>
      

    Includi il percorso finale per ogni suggerimento (la parte unica) nel la colonna SUGGEST_COLUMN_INTENT_DATA_ID dei tuoi suggerimenti . Quando l'utente seleziona un suggerimento, il sistema prende la stringa da android:searchSuggestIntentData, aggiunge una barra (/), e poi aggiunge il rispettivo valore SUGGEST_COLUMN_INTENT_DATA_ID per formare un contenuto completo URI. Puoi quindi recuperare Uri con getData().

Aggiungi altri dati

Se vuoi indicare ulteriori informazioni con il tuo intento, puoi aggiungerne un'altra colonna di tabella, come SUGGEST_COLUMN_INTENT_EXTRA_DATA, che può archiviare ulteriori informazioni sul suggerimento. I dati salvati in questa colonna viene inserito nella sezione EXTRA_DATA_KEY del bundle aggiuntivo dell'intent.

Gestire l'intent

Dopo aver fornito suggerimenti di ricerca personalizzati con gli intent personalizzati, devi la tua attività di ricerca per gestire questi intent quando l'utente seleziona un suggerimento. Questa operazione si aggiunge alla gestione di ACTION_SEARCH per intent, cosa già eseguita dalla tua attività di ricerca. Ecco un esempio di come puoi gestire gli intent durante la 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);
}

In questo esempio, l'azione per intent è ACTION_VIEW e i dati veicola un URI completo che punta all'elemento suggerito, come sintetizzato android:searchSuggestIntentData stringa e SUGGEST_COLUMN_INTENT_DATA_ID. L'URI passa quindi metodo showResult() locale che esegue una query al fornitore di contenuti per specificato dall'URI.

Riscrivi il testo della query

Per impostazione predefinita, se l'utente scorre l'elenco di suggerimenti utilizzando controlli direzionali, come una trackball o un D-pad, il testo della query aggiornamento. Tuttavia, puoi riscrivere temporaneamente il testo della query dell'utente così come viene visualizzato nella casella di testo con una query che corrisponde al suggerimento attivo. Ciò consente l'utente vede la query suggerita e può selezionare la casella di ricerca e modificare la query prima di inviarla come ricerca.

Puoi riscrivere il testo della query nei seguenti modi:

  • Aggiungi l'attributo android:searchMode ai contenuti ricercabili con il valore "queryRewriteFromText". In questo caso, i contenuti della query SUGGEST_COLUMN_TEXT_1 del suggerimento viene utilizzata per riscrivere il testo della query.
  • Aggiungi l'attributo android:searchMode agli elementi ricercabili\ con il valore "queryRewriteFromData". In questo caso, i contenuti del prompt La colonna SUGGEST_COLUMN_INTENT_DATA viene utilizzata per riscrivere la query testo. Utilizzalo solo con URI o altri formati di dati che devono essere visibile all'utente, come gli URL HTTP. Non utilizzare schemi URI interni per riscrivere la query in questo modo.
  • Fornisci una stringa di testo di query univoca nel campo SUGGEST_COLUMN_QUERY della tabella dei suggerimenti. Se questo colonna è presente e contiene un valore per il suggerimento corrente, utilizzato per riscrivere il testo della query e sostituire una delle precedenti implementazioni.

Esponi i suggerimenti di ricerca nella Casella di ricerca rapida

Dopo aver configurato l'app in modo da fornire suggerimenti di ricerca personalizzati, disponibili per la Casella di ricerca rapida accessibile a livello globale è facile quanto la configurazione disponibile per la ricerca android:includeInGlobalSearch con il valore "true".

L'unico scenario in cui è necessario un lavoro aggiuntivo è quando i tuoi contenuti richiede un'autorizzazione di lettura. In questo caso, dovrai aggiungere <path-permission> elemento che il provider concede alla funzionalità Quick Accesso in lettura alla casella di ricerca per il fornitore di contenuti, come illustrato nelle esempio:

<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>

In questo esempio, il provider limita l'accesso in lettura e scrittura ai contenuti. L'elemento <path-permission> modifica la limitazione di concedendo l'accesso in lettura ai contenuti all'interno di "/search_suggest_query" prefisso del percorso quando l'autorizzazione "android.permission.GLOBAL_SEARCH" esiste già. Questa funzionalità concede l'accesso alla Casella di ricerca rapida per eseguire query sui tuoi contenuti un fornitore di servizi per i suggerimenti.

Se il tuo fornitore di contenuti non applica le autorizzazioni di lettura, Box lo legge per impostazione predefinita.

Attivare i suggerimenti su un dispositivo

Per impostazione predefinita, le app non sono in grado di fornire suggerimenti nella Casella di ricerca rapida, anche se sono configurati per farlo. L'utente sceglie se includere suggerimenti dalla tua app nella Casella di ricerca rapida aprendo Ricercabile in Impostazioni > Ricerca e attivare le tue come elemento disponibile per la ricerca.

Ogni app disponibile per la Casella di ricerca rapida ha una voce nella Pagina delle impostazioni Elementi ricercabili. La voce include il nome dell'app e una breve descrizione dei contenuti disponibili per la ricerca dall'app e realizzati disponibili per i suggerimenti nella Casella di ricerca rapida. Per definire il testo della descrizione, procedi nel seguente modo: per la tua app disponibile per la ricerca, aggiungi android:searchSettingsDescription alla configurazione disponibile per la ricerca, come illustrato di seguito esempio:

<?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>

Rendi la stringa per android:searchSettingsDescription concisa il più possibile e indica i contenuti disponibili per la ricerca. Ad esempio, "Artisti, album e tracce" per un'app di musica o "Note salvate" per un'app blocco note. Fornire questa descrizione è importante affinché l'utente sappia che tipo di vengono forniti suggerimenti. Includi sempre questo attributo quando android:includeInGlobalSearch è vero.

L'utente deve accedere al menu delle impostazioni per attivare i suggerimenti di ricerca. la tua app, se la ricerca è un aspetto importante della tua app, considera come comunicalo agli utenti. Ad esempio, potresti fornire una nota la prima volta un utente avvia l'app che spiega come attivare i suggerimenti di ricerca per la funzione casella di ricerca.

Gestisci le scorciatoie per i suggerimenti della Casella di ricerca rapida

I suggerimenti selezionati dall'utente nella Casella di ricerca rapida possono essere trasformate in scorciatoie. Questi sono suggerimenti che il sistema copia dai tuoi fornitore di contenuti in modo da poter accedere rapidamente al suggerimento senza dover eseguire nuovamente una query al fornitore di contenuti.

Per impostazione predefinita, questa opzione è attiva per tutti i suggerimenti recuperati dalla Ricerca rapida Box, ma se i dati del suggerimento cambiano nel tempo, puoi richiedere che aggiornare le scorciatoie. Ad esempio, se i tuoi suggerimenti fanno riferimento alle dati, come lo stato di presenza di un contatto, quindi richiedi che il suggerimento le scorciatoie possono essere aggiornate quando vengono mostrate all'utente. Per farlo, includi SUGGEST_COLUMN_SHORTCUT_ID nella tabella dei suggerimenti. Puoi utilizzare questa colonna per configurare il comportamento della scorciatoia per ogni suggerimento in una delle nei seguenti modi:

  • Fai in modo che la Casella di ricerca rapida esegua nuovamente una query al tuo fornitore di contenuti per trovare della scorciatoia dei suggerimenti.

    Specifica un valore nella colonna SUGGEST_COLUMN_SHORTCUT_ID per al suggerimento di eseguire una nuova query per ottenere una versione nuova ogni volta che la scorciatoia . La scorciatoia viene visualizzata rapidamente con i dati di cui disponi di più disponibili di recente fino a quando non viene restituita la query di aggiornamento, dopodiché viene aggiornato con le nuove informazioni. La query di aggiornamento è inviati al fornitore di contenuti con un percorso URI SUGGEST_URI_PATH_SHORTCUT: anziché SUGGEST_URI_PATH_QUERY.

    Fai in modo che l'oggetto Cursor restituito contenga un suggerimento utilizzando il metodo stesse colonne del suggerimento originale o essere vuote, a indicare che la scorciatoia non è più valida. In questo caso, il suggerimento scompare. e la scorciatoia viene rimossa.

    Se un suggerimento si riferisce a dati il cui aggiornamento può richiedere più tempo, ad esempio una basato sulla rete, puoi anche aggiungere SUGGEST_COLUMN_SPINNER_WHILE_REFRESHING alla tua la tabella dei suggerimenti con il valore true per mostrare una rotellina di avanzamento per a destra fino al termine dell'aggiornamento. Qualsiasi valore diverso da true non mostra la rotellina di avanzamento.

  • Impedire del tutto la copia del suggerimento in una scorciatoia.

    Specifica il valore SUGGEST_NEVER_MAKE_SHORTCUT nel SUGGEST_COLUMN_SHORTCUT_ID. In questo caso, non viene mai copiato in una scorciatoia. Questa operazione è necessaria solo se non vogliono che il suggerimento copiato in precedenza venga visualizzato. Se fornisci un valore normale per la colonna, poi la scorciatoia di suggerimento appare solo fino a quando non viene restituita la query di aggiornamento.

  • Lascia applicato il comportamento predefinito della scorciatoia.

    Lascia vuoto il campo SUGGEST_COLUMN_SHORTCUT_ID per ciascuno che non cambia e che può essere salvato come scorciatoia.

Se nessuno dei suggerimenti dovesse cambiare, non avrai bisogno della Colonna SUGGEST_COLUMN_SHORTCUT_ID.

Informazioni sul ranking dei suggerimenti della Casella di ricerca rapida

Una volta resi disponibili nella Casella di ricerca rapida i suggerimenti di ricerca dell'app, Il ranking della Casella di ricerca rapida determina il modo in cui i suggerimenti vengono mostrati ai un utente specifico per una determinata query. Questo potrebbe dipendere dal numero di altre app risultati per quella query e la frequenza con cui l'utente li seleziona rispetto ai quelli di altre app. Non vi è alcuna garanzia riguardo al modo in cui vengono mostrati o se vengono mostrati o meno i suggerimenti della tua app per una determinata query. Nella in generale, fornire risultati di qualità aumenta la probabilità che l'app i suggerimenti sono in una posizione di rilievo e le app che offrono i suggerimenti di bassa qualità hanno maggiori probabilità di avere un ranking più basso o di non essere visualizzati.