Lorsque vous utilisez la boîte de dialogue de recherche Android ou le widget Recherche, vous pouvez fournir des suggestions de recherche personnalisées créées à partir des données de votre application. Par exemple : Si votre application est un dictionnaire, vous pouvez lui suggérer des mots correspond au texte saisi dans le champ de recherche avant que l'utilisateur n'ait terminé de la saisir sa requête. Ces suggestions sont utiles, car elles permettent de prédire efficacement ce que l’utilisateur veut et lui fournir un accès immédiat. La figure 1 illustre un exemple. d'une boîte de dialogue de recherche avec des suggestions personnalisées.
Lorsque vous fournissez des suggestions personnalisées, vous pouvez également les mettre à la disposition de l'utilisateur le champ de recherche rapide à l'échelle du système, ce qui vous permet d'accéder à votre contenu depuis l'extérieur l'application.
Avant d'ajouter des suggestions personnalisées, implémentez la boîte de dialogue de recherche Android ou un widget Recherche pour les recherches dans votre application. Voir Créer une interface de recherche Contenu fournisseurs.
Principes de base
![](https://developer.android.com/static/images/search/search-suggest-custom.png?authuser=0000&hl=fr)
Figure 1 : Capture d'écran d'une boîte de dialogue de recherche avec des suggestions de recherche personnalisées.
Lorsque l'utilisateur sélectionne une suggestion personnalisée, le système envoie une
Intent
à votre
activité de recherche. Contrairement à une requête de recherche normale qui envoie un intent avec
ACTION_SEARCH
vous pouvez définir des suggestions personnalisées
ACTION_VIEW
ou
toute autre action d'intent, mais aussi les données pertinentes pour
suggestion sélectionnée. Dans l'exemple du dictionnaire, lorsque l'utilisateur sélectionne un
l'application peut immédiatement en ouvrir la définition
de la recherche de correspondances dans le dictionnaire.
Pour fournir des suggestions personnalisées, procédez comme suit:
- Implémentez une activité de recherche basique, comme décrit dans Créez une interface de recherche.
- Modifier la configuration incluse dans l'index de recherche avec des informations sur le contenu qui fournit des suggestions personnalisées.
- Créez une table, comme dans
SQLiteDatabase
, pour obtenir des suggestions et mettez en forme le tableau avec les colonnes requises. - Créez un contenu provider qui a accès à votre tableau de suggestions et déclarer dans votre fichier manifeste.
- Déclare le type de
Intent
à envoyer lorsque l'utilisateur sélectionne un ce qui inclut une action et des données personnalisées.
Tout comme le système Android affiche la boîte de dialogue de recherche, il affiche également votre suggestions de recherche. Vous avez besoin d'un fournisseur de contenu récupérer vos suggestions. Lue Fournisseurs de contenu pour apprendre à créer un fournisseur de contenu.
Lorsque le système détermine que votre activité est incluse dans l’index de recherche et fournit des suggestions de recherche, la procédure suivante se produit lorsque l'utilisateur saisit un requête:
- Le système récupère le texte de la requête de recherche, c'est-à-dire tout ce qui est saisi et envoie une requête à votre fournisseur de contenu, qui gère des suggestions.
- Votre fournisseur de contenu renvoie un
Cursor
qui renvoie vers toutes les suggestions en rapport avec la requête de recherche texte. - Le système affiche la liste des suggestions fournies par le
Cursor
Une fois les suggestions personnalisées affichées, voici ce qui peut se produire:
- Si l'utilisateur saisit une autre lettre ou modifie la requête d'une quelconque façon, la les étapes précédentes, et la liste de suggestions est mise à jour en conséquence.
- Si l'utilisateur effectue la recherche, les suggestions sont ignorées et
sont incluses dans votre activité de recherche à l'aide du bouton
Intent
ACTION_SEARCH
. - Si l'utilisateur sélectionne une suggestion, un intent est envoyé à votre moteur de recherche activité, effectuant une action et des données personnalisées afin que votre application puisse s'ouvrir le contenu suggéré.
Modifier la configuration incluse dans l'index de recherche
Pour accepter les suggestions personnalisées, ajoutez le paramètre
l'attribut android:searchSuggestAuthority
à
<searchable>
dans votre fichier de configuration inclus dans l'index de recherche,
comme illustré dans l'exemple suivant:
<?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>
Vous aurez peut-être besoin d'attributs supplémentaires, en fonction du type d'intent que vous joindre à chaque suggestion et la manière dont vous souhaitez mettre en forme les requêtes pour votre contenu un fournisseur de services agréé. Les autres attributs facultatifs sont abordés dans les .
Créer un fournisseur de contenu
Pour créer un fournisseur de contenu pour les suggestions personnalisées, consultez d'abord
Fournisseurs de contenu
pour apprendre à créer un fournisseur de contenu. Un fournisseur de contenu pour les
est semblable à celui de tout autre fournisseur de contenu. Cependant, pour chaque
suggestion que vous fournissez, la ligne correspondante dans Cursor
doit
inclure des colonnes spécifiques que le système comprend et utilise pour formater les
des suggestions.
Lorsque l'utilisateur saisit du texte dans la boîte de dialogue ou le widget de recherche, le système
demande des suggestions à votre fournisseur de contenu en appelant
query()
chaque fois qu'une lettre est saisie. Dans votre implémentation de query()
,
votre fournisseur de contenu doit rechercher vos données de suggestion et renvoyer un
Cursor
qui pointe vers les lignes dont il estime qu'elles sont correctes
des suggestions.
Pour en savoir plus sur la création d'un fournisseur de contenu pour les suggestions personnalisées, consultez abordés dans les deux sections suivantes:
- Gérer la requête de suggestion
- Comment le système envoie des requêtes à votre fournisseur de contenu et comment les gérer de l'IA générative.
- Créer un tableau de suggestions
- Comment définir les colonnes attendues par le système dans
Cursor
renvoyé avec chaque requête.
Gérer la requête de suggestion
Lorsque le système demande des suggestions à votre fournisseur de contenu, il appelle
la méthode query()
de votre fournisseur de contenu. Implémentez cette méthode pour
rechercher dans vos données de suggestion et renvoyer un Cursor
pointant vers la
des suggestions que vous jugez pertinentes.
Voici un récapitulatif des paramètres transmis par le système à votre
query()
, répertoriées dans l'ordre:
uri
Toujours un contenu
Uri
, formaté comme suit : ce qui suit:content://your.authority/optional.suggest.path/
SUGGEST_URI_PATH_QUERY
Le comportement par défaut est que le système transmet cet URI et ajoute la requête du texte:
content://your.authority/optional.suggest.path/
SUGGEST_URI_PATH_QUERY
/puppiesLe texte de la requête à la fin est encodé à l'aide de règles d'encodage d'URI. Vous pouvez donc vous devez le décoder avant d'effectuer une recherche.
La partie
<ph type="x-smartling-placeholder">optional.suggest.path
n'est incluse que dans l'URI si vous définissez un tel chemin dans votre fichier de configuration inclus dans l'index de recherche avec l'attributandroid:searchSuggestPath
. Cela n'est nécessaire que si vous utilisez le même fournisseur de contenu pour plusieurs activités de recherche ; Si c'est le cas, faites la distinction entre la source de la requête de suggestion.projection
- Toujours "null".
selection
- La valeur fournie dans le champ
android:searchSuggestSelection
de votre fichier de configuration inclus dans l'index de recherche, ou la valeur "null" déclarez l'attributandroid:searchSuggestSelection
. La dans la section suivante.selectionArgs
- Contient la requête de recherche comme premier et unique élément du tableau si vous déclarez l'attribut
android:searchSuggestSelection
dans votre configuration dans l'index de recherche. Si vous ne déclarez pasandroid:searchSuggestSelection
, ce paramètre est nul. Pour en savoir plus, consultez la section suivante.sortOrder
- Toujours "null".
Le système peut vous envoyer le texte de la requête de recherche de deux manières. Par défaut,
pour que le texte de la requête soit inclus en tant que dernier chemin de l'URI de contenu transmis
le paramètre uri
. Toutefois, si vous incluez une valeur de sélection dans
le android:searchSuggestSelection
de votre configuration incluse dans l'index de recherche
, le texte de la requête est alors le premier élément de la
Tableau de chaînes selectionArgs
. Ces deux options sont décrites
suivant.
Obtenir la requête dans l'URI
Par défaut, la requête est ajoutée en tant que dernier segment de uri
.
: un objet Uri
. Pour récupérer le texte de la requête dans
utilisez
getLastPathSegment()
,
comme illustré dans l'exemple suivant:
Kotlin
val query: String = uri.lastPathSegment.toLowerCase()
Java
String query = uri.getLastPathSegment().toLowerCase();
Cela renvoie le dernier segment de Uri
, qui correspond à la requête
texte saisi par l'utilisateur.
Obtenir la requête dans les arguments de sélection
Au lieu d'utiliser l'URI, cela peut être plus judicieux
query()
pour recevoir tout ce dont il a besoin pour effectuer la
et vous voudrez peut-être que selection
et
selectionArgs
pour fournir les valeurs appropriées. Dans ce
ajoutez l'attribut android:searchSuggestSelection
à votre
configuration interrogeable avec votre chaîne de sélection SQLite. Dans la sélection
ajoutez un point d'interrogation (?) à la place de l'espace réservé
requête de recherche. Le système appelle query()
avec la chaîne de sélection suivante :
Le paramètre selection
et la requête de recherche comme premier élément
dans le tableau selectionArgs
.
Par exemple, voici comment vous pouvez former
Attribut android:searchSuggestSelection
pour créer un code
énoncé de recherche:
<?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>
Avec cette configuration, votre méthode query()
fournit le
le paramètre selection
sur "word MATCH ?"
et
selectionArgs
comme requête de recherche. Lorsque vous les transmettez à
une SQLite
query()
comme leurs arguments respectifs, ils sont synthétisés
ensemble, ce qui signifie que le point d'interrogation est remplacé par le texte de la requête. Si
vous recevez les requêtes de suggestion de cette façon et vous devez ajouter des caractères génériques à la requête
ajoutez-les au paramètre selectionArgs
ou ajoutez-les en préfixe au paramètre selectionArgs
, car
cette valeur est placée entre guillemets et insérée à la place du point d'interrogation.
Un autre attribut de l'exemple précédent est
android:searchSuggestIntentAction
, qui définit l'action d'intent
envoyé avec chaque intent lorsque l'utilisateur sélectionne une suggestion. Ce sujet est abordé
dans la section Déclarer un intent pour
et des suggestions.
Créer un tableau de suggestions
Lorsque vous renvoyez des suggestions au système avec un Cursor
, le
s'attend à des colonnes
spécifiques dans chaque ligne. Que vous stockiez ou non
vos données de suggestion dans une base de données SQLite sur l'appareil, une base de données sur
ou un autre format sur l'appareil ou sur le Web, formatez les suggestions sous forme de lignes
dans une table et les présenter avec un Cursor
.
Le système comprend plusieurs colonnes, mais seules deux d'entre elles sont nécessaires:
_ID
- ID de ligne d'entier unique pour chaque suggestion. Le système l'exige pour
présenter les suggestions dans une
ListView
SUGGEST_COLUMN_TEXT_1
- Chaîne présentée comme une suggestion.
Les colonnes suivantes sont toutes facultatives. La plupart sont abordés plus en détail dans dans les sections suivantes.
SUGGEST_COLUMN_TEXT_2
- Chaîne. Si votre
Cursor
inclut cette colonne, toutes les les suggestions s'affichent sur deux lignes. La chaîne de cette colonne est affiché sous la forme d'une seconde ligne de texte plus petite, sous la suggestion principale. texte. Cette valeur peut être nulle ou vide pour indiquer l'absence de texte secondaire. SUGGEST_COLUMN_ICON_1
- Ressource drawable, contenu ou chaîne URI de fichier. Si votre
Cursor
inclut cette colonne, alors toutes les suggestions sont fournies au format icône et texte avec l'icône drawable sur le côté gauche. Ce peuvent être nuls ou zéro pour indiquer qu'aucune icône n'est présente sur cette ligne. SUGGEST_COLUMN_ICON_2
- Ressource drawable, contenu ou chaîne URI de fichier. Si votre
Cursor
inclut cette colonne, alors toutes les suggestions sont fournies au format icône et texte avec l'icône à droite. Il peut s'agir null ou zéro pour indiquer qu'aucune icône n'est présente sur cette ligne. SUGGEST_COLUMN_INTENT_ACTION
- Chaîne d'action d'intent. Si cette colonne existe et contient une valeur au niveau
ligne donnée, l'action définie ici est utilisée lors de la création de la requête
l'intention. Si l'élément n'est pas fourni, l'action est effectuée à partir de la
Champ
android:searchSuggestIntentAction
dans votre index de recherche configuration. Si votre action est la même pour toutes les suggestions, elle est préférable efficace de spécifier l'action en utilisantandroid:searchSuggestIntentAction
et omettez cette colonne. SUGGEST_COLUMN_INTENT_DATA
- Chaîne d'URI de données. Si cette colonne existe et contient une valeur au niveau
, ces données sont utilisées pour former l'intent de la suggestion. Si l'élément
n'est pas fournie, les données proviennent
Champ
android:searchSuggestIntentData
dans votre index de recherche configuration. Si aucune source n'est fournie, le champ de données de l'intent est "null". Si vos données sont identiques pour toutes les suggestions ou peuvent être décrites à l'aide d'une pièce constante et d'un identifiant spécifique, il est plus efficace de spécifier en utilisantandroid:searchSuggestIntentData
et omettez cette . SUGGEST_COLUMN_INTENT_DATA_ID
- Chaîne de chemin d'accès de l'URI. Si cette colonne existe et contient une valeur au niveau
ligne, puis "/" Cette valeur est ajoutée au champ de données de l'intent.
N'utilisez cette option que si le champ de données spécifié par le paramètre
L'attribut
android:searchSuggestIntentData
peut être inclus dans l'index de recherche la configuration est déjà définie sur une chaîne de base appropriée. SUGGEST_COLUMN_INTENT_EXTRA_DATA
- Données arbitraires. Si cette colonne existe et contient une valeur sur une ligne donnée,
il s'agit des données supplémentaires utilisées pour former l'intent de la suggestion.
S'il n'est pas fourni, le champ de données supplémentaires de l'intent est nul. Cette colonne permet
fournissent des données supplémentaires qui sont incluses dans le
intent
EXTRA_DATA_KEY
. SUGGEST_COLUMN_QUERY
- Si cette colonne existe et que cet élément figure à la ligne donnée, la valeur est
les données utilisées lors de la formulation de la requête de suggestion, incluses sous forme de
supplémentaires dans l'intent
QUERY
. Ce champ est obligatoire si l'action de la suggestion estACTION_SEARCH
. mais facultatif dans le cas contraire. SUGGEST_COLUMN_SHORTCUT_ID
- Utilisée uniquement pour l'affichage de suggestions pour le champ de recherche rapide. Cette colonne
indique si une suggestion de recherche doit être enregistrée en tant que raccourci et
ou non. Les raccourcis sont généralement
créés lorsque l'utilisateur
appuie sur une suggestion du champ de recherche rapide S'il n'est pas renseigné, le résultat est stocké
un raccourci et ne sont jamais actualisées. Si défini sur
SUGGEST_NEVER_MAKE_SHORTCUT
, le résultat n'est pas stocké en tant que raccourci. Sinon, l'identifiant de raccourci est utilisé pour consultez cette page pour obtenir une suggestion à jour en utilisantSUGGEST_URI_PATH_SHORTCUT
SUGGEST_COLUMN_SPINNER_WHILE_REFRESHING
- Utilisée uniquement pour l'affichage de suggestions pour le champ de recherche rapide. Cette colonne
indique qu'une icône de chargement doit être affichée au lieu d'une icône
SUGGEST_COLUMN_ICON_2
lorsque le raccourci de cette suggestion est en cours d'actualisation dans le champ de recherche rapide.
La plupart de ces colonnes sont abordées plus en détail dans les sections suivantes.
Déclarer un intent pour les suggestions
Lorsque l'utilisateur sélectionne une suggestion dans la liste qui apparaît sous l'icône
une boîte de dialogue ou un widget de recherche, le système envoie un Intent
personnalisé à votre
activité de recherche. Vous devez définir l'action et les données de l'intent.
Déclarer l'action d'intent
L'action d'intent la plus courante pour une suggestion personnalisée est
ACTION_VIEW
, qui est approprié lorsque vous voulez ouvrir quelque chose,
comme la définition d'un mot, les coordonnées
d'une personne ou une page Web.
Cependant, l'action d'intent peut être n'importe quelle autre action et peut être différente pour chaque
suggestion.
Selon que vous souhaitez ou non que toutes les suggestions utilisent la même action d'intent, vous pouvez définir l'action de deux manières:
- Utilisez l'attribut
android:searchSuggestIntentAction
de votre fichier de configuration interrogeable pour définir l'action pour toutes les suggestions, comme illustré dans l'exemple suivant:<?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>
- Utilisez la colonne
SUGGEST_COLUMN_INTENT_ACTION
pour définir la sur chaque suggestion. Pour ce faire, ajoutez le paramètre Colonne "SUGGEST_COLUMN_INTENT_ACTION
" à votre tableau de suggestions et, pour chaque suggestion, placez-y l'action à utiliser, par exemple"android.intent.action.VIEW"
Vous pouvez également combiner ces deux techniques. Par exemple, vous pouvez inclure le paramètre
Attribut android:searchSuggestIntentAction
avec une action
utilisée avec toutes les suggestions par défaut, puis remplacer cette action pour certaines
des suggestions en déclarant une action différente dans le
SUGGEST_COLUMN_INTENT_ACTION
. Si vous n'incluez pas de valeur
dans la colonne SUGGEST_COLUMN_INTENT_ACTION
, l'intent
fournies dans l'attribut android:searchSuggestIntentAction
est
utilisé.
Déclarer des données d'intent
Lorsque l'utilisateur sélectionne une suggestion, votre activité de recherche reçoit la
avec l'action que vous avez définie, comme nous l'avons vu
mais l'intent doit aussi comporter des données permettant à votre activité d'identifier
la suggestion sélectionnée. Plus précisément, les données doivent être uniques
pour chaque suggestion, par exemple son ID de ligne dans la table SQLite.
Une fois l'intent reçu, vous pouvez récupérer les données associées avec
getData()
ou
getDataString()
Vous pouvez définir les données incluses dans l'intent de deux manières:
- Définissez les données de chaque suggestion dans les
SUGGEST_COLUMN_INTENT_DATA
de votre tableau de suggestions.Fournissez toutes les informations de données nécessaires pour chaque intent dans les suggestions table en incluant la colonne
<ph type="x-smartling-placeholder">SUGGEST_COLUMN_INTENT_DATA
et puis en le renseignant avec des données uniques pour chaque ligne. Les données de cette colonne est attaché à l'intent exactement comme vous le définissez dans cette colonne. Vous pouvez Ensuite, récupérez-le avecgetData()
ougetDataString()
- Fragmenter un URI de données en deux parties: la partie commune à toutes les suggestions
et la partie propre à chaque suggestion. Placez ces pièces
Attribut
android:searchSuggestintentData
de l'index de recherche et la colonneSUGGEST_COLUMN_INTENT_DATA_ID
de dans votre tableau de suggestions, respectivement.L'exemple suivant montre comment déclarer la partie de l'URI commun à toutes les suggestions Attribut
android:searchSuggestIntentData
de votre index de recherche configuration:<?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>
Incluez le chemin final de chaque suggestion (la partie unique) dans la colonne "
SUGGEST_COLUMN_INTENT_DATA_ID
" de vos suggestions tableau. Lorsque l'utilisateur sélectionne une suggestion, le système récupère la chaîneandroid:searchSuggestIntentData
, ajoute une barre oblique (/), puis ajoute la valeur respective deSUGGEST_COLUMN_INTENT_DATA_ID
pour former un contenu complet. URI. Vous pouvez ensuite récupérer leUri
avecgetData()
Ajouter des données
Si vous avez besoin d'exprimer plus d'informations avec votre intention, vous pouvez ajouter
d'une colonne de tableau, comme SUGGEST_COLUMN_INTENT_EXTRA_DATA
,
de stocker des informations
supplémentaires à propos de la suggestion. Données enregistrées dans cette colonne
est placée dans le EXTRA_DATA_KEY
du bundle supplémentaire de l'intent.
Gérer l'intent
Après avoir fourni des suggestions de recherche personnalisées avec des intents personnalisés, vous devez disposer des éléments suivants :
votre activité de recherche pour gérer ces intents lorsque l'utilisateur sélectionne un
suggestion. Cela s'ajoute à la gestion de ACTION_SEARCH
ce que fait déjà votre activité de recherche. Voici un exemple
de la façon dont
vous pouvez gérer les intents pendant le
onCreate()
rappel:
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); }
Dans cet exemple, l'action d'intent est ACTION_VIEW
, et les données
contient un URI complet pointant vers l'élément suggéré, tel que synthétisé par le
Chaîne android:searchSuggestIntentData
et
SUGGEST_COLUMN_INTENT_DATA_ID
. L'URI est ensuite transmis à
Méthode showResult()
locale qui interroge le fournisseur de contenu pour obtenir
spécifié par l'URI.
Réécrire le texte de la requête
Par défaut, si l'utilisateur parcourt la liste de suggestions à l'aide de des commandes directionnelles, comme avec un trackball ou un pavé directionnel, la requête mise à jour. Cependant, vous pouvez réécrire temporairement le texte de la requête de l'utilisateur lorsqu'il apparaît. dans la zone de texte par une requête correspondant à la suggestion sélectionnée. Cela permet au L'utilisateur voit la requête suggérée. Il peut sélectionner le champ de recherche et le modifier la requête avant de l'envoyer en tant que recherche.
Vous pouvez réécrire le texte de la requête comme suit:
- Ajoutez l'attribut
android:searchMode
à votre index de recherche. avec la valeur"queryRewriteFromText"
. Dans ce cas, le contenu duSUGGEST_COLUMN_TEXT_1
de la suggestion est utilisée pour réécrire le texte de la requête. - Ajoutez l'attribut
android:searchMode
à votre liste d'URL incluse dans l'index de recherche. avec la valeur"queryRewriteFromData"
. Dans ce le contenu de la requête La colonneSUGGEST_COLUMN_INTENT_DATA
permet de réécrire la requête. texte. N'utilisez cette option qu'avec des URI ou d'autres formats de données visibles par l'utilisateur, comme les URL HTTP. N'utilisez pas de schémas d'URI internes pour réécrire la requête de cette manière. - Indiquez une chaîne de texte de requête unique dans la propriété
SUGGEST_COLUMN_QUERY
de votre tableau de suggestions. Si cette est présente et contient une valeur pour la suggestion actuelle, elle est utilisée pour réécrire le texte de la requête et remplacer l'une des mises en œuvre.
Afficher les suggestions de recherche dans le champ de recherche rapide
Une fois que vous avez configuré votre application
pour fournir des suggestions de recherche personnalisées,
disponible dans le champ de recherche rapide, accessible mondialement, est aussi simple que de modifier
votre configuration interrogeable pour inclure
android:includeInGlobalSearch
par la valeur
"true"
Le seul scénario dans lequel un travail supplémentaire est nécessaire est lorsque votre contenu
nécessite une autorisation de lecture. Dans ce cas, vous devez ajouter
Élément <path-permission>
permettant au fournisseur d'accorder l'autorisation Quick
Accès en lecture au champ de recherche à votre fournisseur de contenu, comme indiqué ci-dessous
Exemple:
<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>
Dans cet exemple, le fournisseur limite l'accès en lecture et en écriture au contenu.
L'élément <path-permission>
modifie la restriction de
accordant un accès en lecture au contenu de "/search_suggest_query"
préfixe de chemin d'accès lorsque l'autorisation "android.permission.GLOBAL_SEARCH"
existe. Cette action permet d'autoriser l'accès au champ de recherche rapide pour qu'il puisse interroger votre contenu
pour obtenir des suggestions.
Si votre fournisseur de contenu n'applique pas les autorisations de lecture, la recherche rapide Box le lit par défaut.
Activer les suggestions sur un appareil
Par défaut, les applications ne sont pas autorisées à fournir des suggestions dans le champ de recherche rapide, même s'ils sont configurés pour le faire. L'utilisateur choisit d'inclure ou non suggestions de votre application dans le champ de recherche rapide en ouvrant Inclus dans l'index de recherche , situés dans Paramètres > le Réseau de Recherche, puis activez vos en tant qu'élément inclus dans l'index de recherche.
Chaque application disponible pour le champ de recherche rapide comporte une entrée dans le
Page des paramètres Éléments inclus dans l'index de recherche. L'entrée comprend le nom de l'application
ainsi qu'une brève description du contenu pouvant faire l'objet d'une recherche dans l'application et
disponible pour obtenir des suggestions dans le champ de recherche rapide. Pour définir le texte de la description
pour votre application incluse dans l'index de recherche, ajoutez android:searchSettingsDescription
à votre configuration incluse dans l'index de recherche, comme indiqué ci-dessous
Exemple:
<?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>
Rendre la chaîne android:searchSettingsDescription
aussi concise
que possible et indiquez le contenu qui peut être inclus dans l'index de recherche. Par exemple, "Artistes,
des albums et des titres" pour une application musicale, ou "Notes enregistrées" pour une application
de bloc-notes.
Il est important de fournir cette description
pour que l'utilisateur sache quel type de
si des suggestions sont fournies. Toujours inclure cet attribut lorsque
android:includeInGlobalSearch
est vrai.
Parce que l'utilisateur doit accéder au menu des paramètres pour activer les suggestions de recherche pour votre application, si la recherche est un aspect important de votre application, demandez-vous comment transmettre cela à vos utilisateurs. Par exemple, vous pouvez rédiger une note la première fois Un utilisateur lance l'application qui explique comment activer les suggestions de recherche pour Quick. Champ de recherche.
Gérer les raccourcis des suggestions du champ de recherche rapide
Les suggestions sélectionnées par l'utilisateur dans le champ de recherche rapide peuvent être automatiquement transformés en raccourcis. Ce sont des suggestions que le système copie le fournisseur de contenu pour accéder rapidement à la suggestion sans avoir à d'interroger à nouveau votre fournisseur de contenu.
Cette option est activée par défaut pour toutes les suggestions récupérées par la recherche rapide.
Box, mais si vos données de suggestion changent au fil du temps, vous pouvez demander que
les raccourcis soient actualisés. Par exemple, si vos suggestions font référence à
telles que l'état de présence d'un contact, puis demandez que la suggestion
les raccourcis sont actualisés lorsqu'ils sont visibles par l'utilisateur. Pour ce faire, incluez le paramètre
SUGGEST_COLUMN_SHORTCUT_ID
dans votre tableau de suggestions. Vous pouvez utiliser
cette colonne pour configurer le comportement du raccourci pour chaque suggestion dans l'une des
de différentes manières:
Configurez le champ de recherche rapide pour relancer la requête de votre fournisseur de contenu afin de trouver du raccourci de suggestion.
Indiquez une valeur dans la colonne
SUGGEST_COLUMN_SHORTCUT_ID
pour la suggestion de demander une nouvelle version chaque fois que le raccourci s'affiche. Le raccourci s'affiche rapidement avec les données les plus importantes disponibles récemment jusqu'à ce que la requête "refresh" soit renvoyée, auquel cas la fonction la suggestion est actualisée avec les nouvelles informations. La requête d'actualisation est envoyé à votre fournisseur de contenu avec un chemin d'URISUGGEST_URI_PATH_SHORTCUT
, au lieu deSUGGEST_URI_PATH_QUERY
Faites en sorte que le
Cursor
que vous renvoyez contienne une suggestion à l'aide de la méthode les mêmes colonnes que la suggestion d'origine ou être vides, ce qui indique que le raccourci n'est plus valide, auquel cas la suggestion disparaît et le raccourci est supprimé.Si une suggestion fait référence à des données dont l'actualisation peut prendre plus de temps, par exemple basée sur le réseau, vous pouvez aussi ajouter
SUGGEST_COLUMN_SPINNER_WHILE_REFRESHING
à votre de suggestions associées à la valeur "true" afin d'afficher une icône de chargement de la progression pour jusqu'à la fin de l'actualisation. Toute valeur autre que "true" n'affiche pas l'icône de chargement.Empêcher la copie de la suggestion dans un raccourci
Indiquez la valeur
SUGGEST_NEVER_MAKE_SHORTCUT
dans le champSUGGEST_COLUMN_SHORTCUT_ID
. Dans ce cas, la suggestion n'est jamais copiée dans un raccourci. Cela n'est nécessaire que si vous ne voulez absolument pas que la suggestion précédemment copiée apparaisse. Si vous une valeur normale pour la colonne, le raccourci des suggestions apparaît uniquement jusqu'au retour de la requête d'actualisation.Appliquez le comportement par défaut des raccourcis.
Laissez le champ
SUGGEST_COLUMN_SHORTCUT_ID
vide pour chaque élément une suggestion qui ne change pas et qui peut être enregistrée raccourci.
Si aucune de vos suggestions ne change, vous n'avez pas besoin
SUGGEST_COLUMN_SHORTCUT_ID
.
À propos du classement des suggestions du champ de recherche rapide
Une fois les suggestions de recherche de votre application disponibles pour le champ de recherche rapide, le classement du champ de recherche rapide détermine la façon dont les suggestions sont présentées pour une requête donnée. Cela peut dépendre du nombre d'autres applications qui ont les résultats de cette requête et la fréquence à laquelle l'utilisateur sélectionne vos résultats ceux d'autres applications. Nous ne pouvons pas vous garantir que vos suggestions seront affichées classées ou si les suggestions de votre application s'affichent pour une requête donnée. Dans En général, fournir des résultats de qualité augmente la probabilité que votre application les suggestions sont bien visibles et les applications qui offrent les suggestions de faible qualité sont plus susceptibles d'être moins bien classées ou de ne pas s'afficher.