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
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:
- 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.
- Il tuo fornitore di contenuti restituisce un
Cursor
che rimanda a tutti i suggerimenti pertinenti alla query di ricerca testo. - 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:
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
/puppiesIl 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'attributoandroid: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.projection
- Sempre null.
selection
- Il valore specificato nei
android:searchSuggestSelection
del file di configurazione disponibile per la ricerca o nullo se non dichiarare l'attributoandroid:searchSuggestSelection
. La nella sezione che segue approfondisce l'argomento.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 dichiariandroid:searchSuggestSelection
, questo parametro è nullo. Questa sezione viene approfondita nella sezione che segue.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 utilizzandoandroid: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 utilizzandoandroid: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 utilizzandoSUGGEST_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 parametroSUGGEST_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 congetData()
ogetDataString()
. - 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 colonnaSUGGEST_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 daandroid:searchSuggestIntentData
, aggiunge una barra (/), e poi aggiunge il rispettivo valoreSUGGEST_COLUMN_INTENT_DATA_ID
per formare un contenuto completo URI. Puoi quindi recuperareUri
congetData()
.
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 querySUGGEST_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 colonnaSUGGEST_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 URISUGGEST_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
nelSUGGEST_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.