Ajouter des suggestions de recherche personnalisées

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

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:

  1. 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.
  2. Votre fournisseur de contenu renvoie un Cursor qui renvoie vers toutes les suggestions en rapport avec la requête de recherche texte.
  3. 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:

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

    Le 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 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'attribut android: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.

    <ph type="x-smartling-placeholder">
  2. projection
    Toujours "null".
  3. 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'attribut android:searchSuggestSelection. La dans la section suivante.
  4. 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 pas android:searchSuggestSelection, ce paramètre est nul. Pour en savoir plus, consultez la section suivante.
  5. 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.

<ph type="x-smartling-placeholder">

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.

<ph type="x-smartling-placeholder">

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 utilisant android: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 utilisant android: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 est ACTION_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 utilisant SUGGEST_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é.

<ph type="x-smartling-placeholder">

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 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 avec getData() ou getDataString()

    <ph type="x-smartling-placeholder">
  • 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 colonne SUGGEST_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îne android:searchSuggestIntentData, ajoute une barre oblique (/), puis ajoute la valeur respective de SUGGEST_COLUMN_INTENT_DATA_ID pour former un contenu complet. URI. Vous pouvez ensuite récupérer le Uri avec getData()

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.

<ph type="x-smartling-placeholder">

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 du SUGGEST_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 colonne SUGGEST_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'URI SUGGEST_URI_PATH_SHORTCUT, au lieu de SUGGEST_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 champ SUGGEST_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.

<ph type="x-smartling-placeholder">

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