Benutzerdefinierte Suchvorschläge hinzufügen

Wenn Sie das Suchdialogfeld oder das Such-Widget von Android verwenden, können Sie benutzerdefinierte Suchvorschläge, die aus Daten in Ihrer App erstellt werden. Beispiel: Ist Ihre App ein Wörterbuch, können Sie Wörter aus dem Wörterbuch vorschlagen, dem Text im Suchfeld entsprechen, bevor der Nutzer die Eingabe beendet. ihre Suchanfrage. Diese Vorschläge sind wertvoll, was die Nutzenden sich wünschen, und ihnen sofortigen Zugriff darauf zu ermöglichen. Abbildung 1 zeigt ein Beispiel. eines Suchdialogfelds mit benutzerdefinierten Vorschlägen.

Nachdem Sie benutzerdefinierte Vorschläge gemacht haben, können Sie sie auch für die über das systemweite Schnellsuchfeld auf Inhalte von außerhalb Ihres

Bevor Sie benutzerdefinierte Vorschläge hinzufügen, implementieren Sie das Android-Suchdialogfeld oder eine Such-Widget für Suchanfragen in deiner App. Weitere Informationen finden Sie unter Erstellen Suchoberfläche und Inhalt Anbietern.

Grundlagen

Abbildung 1: Screenshot eines Suchdialogfelds mit benutzerdefinierte Suchvorschläge.

Wenn der Nutzer einen benutzerdefinierten Vorschlag auswählt, sendet das System eine Intent zu deinem durchsuchbare Aktivitäten. Anders als bei einer normalen Suchanfrage, bei der ein Intent mit der ACTION_SEARCH Aktion verwenden, können Sie stattdessen Ihre benutzerdefinierten Vorschläge für ACTION_VIEW oder alle anderen Intent-Aktionen zu erstellen. Außerdem sollten Sie Daten einbeziehen, ausgewählten Vorschlag. Wenn im Wörterbuchbeispiel ein Nutzer ein kann die App sofort die Definition für dieses Wort öffnen, im Wörterbuch nach Übereinstimmungen zu suchen.

So erstellen Sie benutzerdefinierte Vorschläge:

  • Implementieren Sie eine einfache durchsuchbare Aktivität wie unter Erstellen Sie eine Suchoberfläche.
  • Konfiguration der suchbaren Konfiguration mit Informationen zum Inhalt ändern der benutzerdefinierte Vorschläge bereitstellt.
  • Erstellen Sie eine Tabelle, zum Beispiel in einem SQLiteDatabase, für Ihre Vorschläge und formatieren Sie die Tabelle mit den erforderlichen Spalten.
  • Inhalte erstellen Anbieter mit Zugriff auf Ihre Tabelle mit Vorschlägen und deklarieren Sie in Ihrem Manifest.
  • Geben Sie den Typ von Intent an, der gesendet werden soll, wenn der Nutzer einen einschließlich einer benutzerdefinierten Aktion und benutzerdefinierten Daten.

So wie das Android-System das Suchdialogfeld anzeigt, werden auch Ihre Suchvorschlägen angezeigt. Sie benötigen einen Contentanbieter, von dem das System um Ihre Vorschläge abzurufen. Gelesen Contentanbieter um zu erfahren, wie Sie einen Contentanbieter erstellen.

Wenn das System erkennt, dass Ihre Aktivitäten durchsuchbar sind, und Suchvorschlägen angezeigt wird, geschieht Folgendes, wenn der Nutzer ein Suchanfrage:

  1. Das System nimmt den Text der Suchanfrage, d. h., was immer und führt eine Abfrage an Ihren Contentanbieter durch, der Ihre Vorschläge machen.
  2. Ihr Contentanbieter gibt eine Cursor die auf alle Vorschläge verweist, die für die Suchanfrage relevant sind, Text.
  3. Das System zeigt die Liste der vom Cursor

Sobald die benutzerdefinierten Vorschläge angezeigt werden, kann Folgendes geschehen:

  • Gibt der Nutzer einen weiteren Buchstaben ein oder ändert die Suchanfrage in irgendeiner Weise, die vorherigen Schritte wiederholen und die Vorschlagsliste wird entsprechend aktualisiert.
  • Wenn der Nutzer die Suche ausführt, werden die Vorschläge ignoriert und der an Ihre durchsuchbaren Aktivitäten geliefert wird, ACTION_SEARCH Intent.
  • Wenn der Nutzer einen Vorschlag auswählt, wird ein Intent an Ihre suchbare mit einer benutzerdefinierten Aktion und benutzerdefinierten Daten, damit Ihre App die vorgeschlagenen Inhalte.

Konfiguration durchsuchbar ändern

Um benutzerdefinierte Vorschläge zu unterstützen, fügen Sie den android:searchSuggestAuthority-Attribut für den <searchable>-Element in Ihrer durchsuchbaren Konfigurationsdatei Dies wird im folgenden Beispiel gezeigt:

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

Je nach Art des Intents, den Sie erstellen möchten, an jeden Vorschlag anhängen und wie Sie Abfragen zu Ihrem Inhalt formatieren möchten Dienstanbieter. Die anderen optionalen Attribute werden im Folgenden .

Contentanbieter erstellen

Wenn Sie einen Contentanbieter für benutzerdefinierte Vorschläge erstellen möchten, lesen Sie zuerst Contentanbieter um zu erfahren, wie Sie einen Contentanbieter erstellen. Contentanbieter für benutzerdefinierte ist ähnlich wie jeder andere Contentanbieter. Für jede angegeben ist, muss die entsprechende Zeile in Cursor bestimmte Spalten enthalten, die das System versteht und zur Formatierung der Vorschläge machen.

Wenn der Nutzer Text in das Suchdialogfeld oder das Such-Widget eingibt, fragt Ihren Contentanbieter nach Vorschlägen, indem er query() jedes Mal, wenn ein Buchstabe eingegeben wird. Bei der Implementierung von query() muss Ihr Contentanbieter Ihre Vorschlagsdaten durchsuchen und eine Cursor, die auf die Zeilen verweist, die als gut eingestuft werden Vorschläge machen.

Details zum Erstellen eines Contentanbieters für benutzerdefinierte Vorschläge finden Sie hier: die wir in den folgenden beiden Abschnitten erläutert haben:

Vorschlagsabfrage verarbeiten
Wie das System Anfragen an Ihren Contentanbieter sendet und wie mit .
Tabelle mit Vorschlägen erstellen
So definieren Sie die Spalten, die das System in der Cursor wird bei jeder Abfrage zurückgegeben.

Die Vorschlagsabfrage verarbeiten

Wenn das System Vorschläge von Ihrem Contentanbieter anfordert, ruft es mit der query()-Methode Ihres Contentanbieters. Implementieren Sie diese Methode, Ihre Vorschlagsdaten durchsuchen und einen Cursor zurückgeben, der auf den die Sie für relevant halten.

Hier ist eine Zusammenfassung der Parameter, die das System an Ihre Methode query(), in der angegebenen Reihenfolge:

  1. uri

    Immer relevante Inhalte Uri, formatiert als folgt:

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

    Das Standardverhalten besteht darin, dass das System diesen URI übergibt und die Abfrage anhängt, Text hinzufügen:

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

    Der Abfragetext am Ende ist mit URI-Codierungsregeln codiert. Daher können Sie decodieren müssen, bevor eine Suche durchgeführt werden kann.

    Der Teil optional.suggest.path ist nur in den URI, wenn Sie einen solchen Pfad in Ihrer durchsuchbaren Konfigurationsdatei mit Attribut android:searchSuggestPath Dies ist nur erforderlich, wenn Sie denselben Contentanbieter für mehrere durchsuchbare Aktivitäten verwenden. Wenn dies der Fall ist, unterscheiden Sie die Quelle der Vorschlagsabfrage.

    <ph type="x-smartling-placeholder">
  2. projection
    Immer null.
  3. selection
    Der in android:searchSuggestSelection angegebene Wert Ihrer durchsuchbaren Konfigurationsdatei oder null, wenn Sie das Attribut android:searchSuggestSelection deklarieren Die wird dies näher erläutert.
  4. selectionArgs
    Enthält die Suchanfrage als erstes und einziges Element des Arrays, wenn deklarieren Sie das Attribut android:searchSuggestSelection in Ihrer durchsuchbaren Konfiguration. Wenn Sie nicht android:searchSuggestSelection lautet, ist dieser Parameter null. Im folgenden Abschnitt wird dies näher erläutert.
  5. sortOrder
    Immer null.

Das System kann Ihnen den Text der Suchanfrage auf zwei Arten senden. Die Standardmethode ist , um den Abfragetext als letzten Pfad des Inhalts-URI einzufügen, der an den Parameter uri. Wenn Sie jedoch einen Auswahlwert android:searchSuggestSelection Ihrer durchsuchbaren Konfiguration -Attribut enthält, wird der Abfragetext stattdessen als erstes Element des String-Array von selectionArgs Diese beiden Optionen werden

Abfrage im URI abrufen

Standardmäßig wird die Abfrage als letztes Segment von uri angehängt. -Parameter: ein Uri-Objekt. Um den Abfragetext in diesem Fall, verwenden getLastPathSegment(), Dies wird im folgenden Beispiel gezeigt:

Kotlin

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

Java

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

Dadurch wird das letzte Segment von Uri zurückgegeben, bei dem es sich um die Abfrage handelt. Text, den der Nutzer eingibt.

Abfrage in den Auswahlargumenten abrufen

Statt den URI zu verwenden, ist er für Ihre Website möglicherweise sinnvoller query() können Sie alles empfangen, was zum Ausführen der Aktion benötigt wird. und Sie möchten vielleicht selection und selectionArgs-Parameter, damit die entsprechenden Werte übernommen werden. In dieser fügen Sie das Attribut android:searchSuggestSelection durchsuchbare Konfiguration mit Ihrem SQLite-Auswahlstring. In der Auswahl String ein Fragezeichen (?) als Platzhalter für die eigentliche Suchanfrage. Das System ruft query() mit dem Auswahlstring wie folgt auf: den Parameter selection und die Suchanfrage als erstes Element im Array selectionArgs.

So könnten Sie zum Beispiel die android:searchSuggestSelection-Attribut zum Erstellen eines Volltexts. Suchanweisung:

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

Bei dieser Konfiguration liefert die Methode query() Folgendes: selection-Parameter als "word MATCH ?" und der selectionArgs als Suchanfrage verwenden. Wenn Sie diese an ein SQLiter query() werden als entsprechende Argumente synthetisiert. zusammen, d. h. das Fragezeichen wird durch den Text der Suchanfrage ersetzt. Wenn erhalten Sie auf diese Weise Vorschlagsabfragen und müssen der Abfrage Platzhalter hinzufügen. Text hinzufügen oder dem selectionArgs-Parameter voranstellen, weil wird dieser Wert in Anführungszeichen gesetzt und anstelle des Fragezeichens eingefügt.

Ein weiteres Attribut im vorherigen Beispiel ist android:searchSuggestIntentAction, die die Intent-Aktion definiert die mit dem jeweiligen Intent gesendet werden, wenn der Nutzer einen Vorschlag auswählt. Dies wird diskutiert, im Abschnitt Einen Intent deklarieren für Vorschläge angezeigt.

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

Vorschlagstabelle erstellen

Wenn Sie mit Cursor Vorschläge an das System zurückgeben, bestimmte Spalten in jeder Zeile erwartet. Unabhängig davon, ob Sie in einer SQLite-Datenbank auf dem Gerät, einer Datenbank in Server oder in einem anderen Format auf dem Gerät oder im Web, formatieren Sie die Vorschläge als Zeilen in einer Tabelle und präsentiere sie mit einem Cursor.

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

Das System versteht mehrere Spalten, es werden aber nur zwei davon benötigt:

_ID
Eine eindeutige Ganzzahlzeilen-ID für jeden Vorschlag. Das System benötigt dies, um Vorschläge in einer ListView
SUGGEST_COLUMN_TEXT_1
Die Zeichenfolge, die als Vorschlag angezeigt wird.

Die folgenden Spalten sind alle optional. Die meisten werden in den folgenden Abschnitten.

SUGGEST_COLUMN_TEXT_2
Ein String. Wenn Ihre Cursor diese Spalte enthält, dann werden in einem zweizeiligen Format bereitgestellt. Der String in dieser Spalte lautet Wird als zweite, kleinere Textzeile unter dem primären Vorschlag angezeigt Text. Er kann null oder leer sein, um anzugeben, dass kein Sekundärtext vorhanden ist.
SUGGEST_COLUMN_ICON_1
Ein Drawable-Ressource, -Inhalt oder Datei-URI-String. Wenn Ihr Cursor enthält diese Spalte, dann werden alle Vorschläge bereitgestellt in einem Symbol-Plus-Text-Format mit dem Drawable-Symbol auf der linken Seite. Dieses kann null oder null sein, wenn in dieser Zeile kein Symbol angezeigt wird.
SUGGEST_COLUMN_ICON_2
Ein Drawable-Ressource, -Inhalt oder Datei-URI-String. Wenn Ihr Cursor enthält diese Spalte, dann werden alle Vorschläge bereitgestellt in einem Symbol-Plus-Text-Format mit dem Symbol auf der rechten Seite. Dabei kann es sich um null oder null, wenn in dieser Zeile kein Symbol angezeigt wird.
SUGGEST_COLUMN_INTENT_ACTION
Ein Intent-Aktionsstring. Wenn diese Spalte vorhanden ist und an der Zeile wird die hier definierte Aktion bei der Erstellung der die Nutzerabsicht verstehen. Wenn das Element nicht angegeben ist, wird die Aktion vom Feld android:searchSuggestIntentAction in Ihrer suchbaren Konfiguration. Wenn Sie für alle Vorschläge dieselbe Aktion ausführen, ist es eher Aktion effizient mithilfe von android:searchSuggestIntentAction und lassen Sie diese Spalte weg.
SUGGEST_COLUMN_INTENT_DATA
Ein Daten-URI-String. Wenn diese Spalte vorhanden ist und am angegebenen Ort einen Wert enthält, Zeile wird mit diesen Daten der Intent des Vorschlags gebildet. Wenn das Element nicht angegeben ist, werden die Daten aus dem Feld android:searchSuggestIntentData in Ihrer suchbaren Konfiguration. Wenn keine der beiden Quellen angegeben ist, wird das Datenfeld des Intents null. Wenn Ihre Daten für alle Vorschläge identisch sind oder beschrieben werden können einen konstanten Teil und eine spezifische ID verwenden, ist es effizienter, sie anzugeben, mit android:searchSuggestIntentData und lassen das Spalte.
SUGGEST_COLUMN_INTENT_DATA_ID
Ein URI-Pfadstring. Wenn diese Spalte vorhanden ist und am angegebenen Ort einen Wert enthält, Zeile, dann „/“ Dieser Wert wird an das Datenfeld im Intent angehängt. Verwenden Sie diese Option nur, wenn das vom Attribut android:searchSuggestIntentData im Suchbereich Konfiguration ist bereits auf einen entsprechenden Basisstring festgelegt.
SUGGEST_COLUMN_INTENT_EXTRA_DATA
Beliebige Daten. Wenn diese Spalte vorhanden ist und in einer bestimmten Zeile einen Wert enthält, Dies sind die zusätzlichen Daten, die bei der Erstellung des Vorschlags verwendet werden. Wenn nicht angegeben, ist das zusätzliche Datenfeld des Intents null. Mit dieser Spalte können Vorschläge liefern zusätzliche Daten, die als Bonus im Feld Intents EXTRA_DATA_KEY .
SUGGEST_COLUMN_QUERY
Wenn diese Spalte und dieses Element in der angegebenen Zeile vorhanden sind, ist dies die Daten, die bei der Erstellung der Abfrage des Vorschlags verwendet werden, enthalten als zusätzliche Informationen QUERY . Es ist erforderlich, wenn die Aktion des Vorschlags ACTION_SEARCH ist, aber ansonsten optional.
SUGGEST_COLUMN_SHORTCUT_ID
Wird nur für Vorschläge für das Schnellsuchfeld verwendet. Diese Spalte gibt an, ob ein Suchvorschlag als Shortcut gespeichert und ob sie validiert werden muss. Verknüpfungen werden in der Regel erstellt, tippt auf einen Vorschlag aus dem Schnellsuchfeld. Fehlt diese Angabe, wird das Ergebnis gespeichert als und nie aktualisiert. Wenn festgelegt auf SUGGEST_NEVER_MAKE_SHORTCUT, wird das Ergebnis nicht als Verknüpfung gespeichert. Andernfalls wird die Verknüpfungs-ID verwendet, um überprüfen Sie regelmäßig, ob Sie einen aktuellen Vorschlag erhalten, SUGGEST_URI_PATH_SHORTCUT
SUGGEST_COLUMN_SPINNER_WHILE_REFRESHING
Wird nur für Vorschläge für das Schnellsuchfeld verwendet. Diese Spalte gibt an, dass ein rotierendes Ladesymbol anstelle eines Symbols aus SUGGEST_COLUMN_ICON_2, solange die Tastenkombination für diesen Vorschlag ist Aktualisierung im Schnellsuchfeld.

Die meisten dieser Spalten werden in den folgenden Abschnitten näher erläutert.

Intent für Vorschläge deklarieren

Wenn der Nutzer einen Vorschlag aus der Liste auswählt, die unter der Suchdialogfeld oder Widget suchen, sendet das System eine benutzerdefinierte Intent an Ihr durchsuchbare Aktivitäten. Sie müssen die Aktion und die Daten für den Intent definieren.

Deklarieren Sie die Intent-Aktion

Die gängigste Intent-Aktion für einen benutzerdefinierten Vorschlag ist ACTION_VIEW an, was sinnvoll ist, wenn Sie etwas öffnen möchten, z. B. die Definition für ein Wort, die Kontaktinformationen einer Person oder eine Webseite. Die Intent-Aktion kann jedoch auch jede andere Aktion sein und für jede Aktion unterschiedlich sein. Vorschlag.

Je nachdem, ob für alle Vorschläge dieselbe Intent-Aktion verwendet werden soll, können Sie die Aktion auf zwei Arten definieren:

  • Verwenden Sie das Attribut android:searchSuggestIntentAction Ihrer eine suchbare Konfigurationsdatei, um die Aktion für alle Vorschläge zu definieren, wie Beispiel:
    <?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>
    
  • Verwenden Sie die Spalte SUGGEST_COLUMN_INTENT_ACTION, um die Aktion für einzelne Vorschläge. Fügen Sie dazu den Parameter SUGGEST_COLUMN_INTENT_ACTION der Tabelle mit Vorschlägen hinzu Geben Sie bei jedem Vorschlag die Aktion an, die Sie verwenden möchten, z. B. "android.intent.action.VIEW".

Sie können diese beiden Methoden auch kombinieren. Sie können beispielsweise das Tag Attribut android:searchSuggestIntentAction mit der gewünschten Aktion wird standardmäßig für alle Vorschläge verwendet. Diese Aktion kann dann für einige indem Sie im Abschnitt SUGGEST_COLUMN_INTENT_ACTION. Wenn Sie keinen Wert in der Spalte SUGGEST_COLUMN_INTENT_ACTION, dann gibt der Intent im Attribut android:searchSuggestIntentAction angegeben ist, verwendet.

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

Intent-Daten deklarieren

Wenn der Nutzer einen Vorschlag auswählt, erhält Ihre suchbare Aktivität den mit der von Ihnen definierten Aktion, wie in den vorherigen aber der Intent muss auch Daten enthalten, anhand derer Ihre Aktivitäten ermitteln können, welcher Vorschlag ausgewählt wird. Insbesondere müssen die Daten eindeutig sein für jeden Vorschlag, z. B. die Zeilen-ID für den Vorschlag in Ihrer SQLite-Tabelle. Wenn der Intent empfangen wurde, können Sie die angehängten Daten mit folgendem Befehl abrufen: getData() oder getDataString().

Sie können die im Intent enthaltenen Daten auf zwei Arten definieren:

  • Definieren Sie die Daten für jeden Vorschlag im SUGGEST_COLUMN_INTENT_DATA der Tabelle mit Vorschlägen.

    Geben Sie in den Vorschlägen alle erforderlichen Dateninformationen für jeden Intent an Tabelle hinzu, indem Sie die Spalte SUGGEST_COLUMN_INTENT_DATA und und füllt es dann mit eindeutigen Daten für jede Zeile. Die Daten aus dieser Spalte an den Intent genau so angehängt ist, wie Sie ihn in dieser Spalte definieren. Sie können Rufen Sie sie dann mit getData() ab oder getDataString().

    <ph type="x-smartling-placeholder">
  • Daten-URI in zwei Teile fragmentieren: den Teil, der allen Vorschlägen gemeinsam ist und den für jeden Vorschlag eindeutigen Teil. Platzieren Sie diese Teile in der Attribut android:searchSuggestintentData des suchbaren und die Spalte SUGGEST_COLUMN_INTENT_DATA_ID Ihre Tabelle mit Vorschlägen.

    Das folgende Beispiel zeigt, wie der Teil des URI deklariert wird, der Vorschläge in der android:searchSuggestIntentData Attribut Ihrer suchbaren Konfiguration:

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

    Fügen Sie den endgültigen Pfad für jeden Vorschlag – den eindeutigen Teil – in Die Spalte SUGGEST_COLUMN_INTENT_DATA_ID Ihrer Vorschläge . Wenn der Nutzer einen Vorschlag auswählt, übernimmt das System die Zeichenfolge aus android:searchSuggestIntentData, hängt einen Schrägstrich (/) an, und addiert dann den entsprechenden Wert aus der SUGGEST_COLUMN_INTENT_DATA_ID, um einen vollständigen Inhalt zu bilden URI. Anschließend können Sie den Uri mit getData().

Weitere Daten hinzufügen

Wenn Sie mit Ihrem Intent weitere Informationen ausdrücken möchten, können Sie eine weitere enthalten, wie SUGGEST_COLUMN_INTENT_EXTRA_DATA, mit dem um zusätzliche Informationen zum Vorschlag zu speichern. Die in dieser Spalte gespeicherten Daten wird im EXTRA_DATA_KEY des zusätzlichen Bundles des Intents platziert.

Mit Intent umgehen

Nachdem Sie benutzerdefinierte Suchvorschläge mit benutzerdefinierten Intents bereitgestellt haben, benötigen Sie Ihre Suchaktivitäten, um diese Intents zu verarbeiten, wenn der Nutzer ein Vorschlag. Dies gilt zusätzlich zur Verarbeitung von ACTION_SEARCH was Ihre Suchaktivitäten bereits tun. Hier ist ein Beispiel dafür, können Sie die Intents während der Aktivität 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 diesem Beispiel lautet die Intent-Aktion ACTION_VIEW und die Daten einen vollständigen URI enthält, der auf das vorgeschlagene Element verweist, das vom android:searchSuggestIntentData-String und SUGGEST_COLUMN_INTENT_DATA_ID. Der URI wird dann an den lokale showResult()-Methode, die den Contentanbieter für die ein durch den URI angegebenes Element.

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

Abfragetext umschreiben

Wenn Nutzende durch die Liste mit Vorschlägen navigieren, z. B. mit einem Trackball oder einem Steuerkreuz, erscheint der Anfragetext aktualisieren. Sie können den Anfragetext des Nutzers jedoch vorübergehend so umschreiben, wie er angezeigt wird. in das Textfeld mit einer Abfrage ein, die dem ausgewählten Vorschlag entspricht. Dadurch kann das Nutzer sehen die vorgeschlagene Suchanfrage und können das Suchfeld auswählen und den bevor Sie sie als Suche abschicken.

Sie können den Abfragetext folgendermaßen umschreiben:

  • Fügen Sie das Attribut android:searchMode Konfiguration mit dem Wert "queryRewriteFromText". In dieser der Inhalt aus dem SUGGEST_COLUMN_TEXT_1 des Vorschlags wird der Abfragetext neu geschrieben.
  • Füge das Attribut android:searchMode zu deinem Konfiguration mit dem Wert "queryRewriteFromData". In dieser wird der Inhalt des Vorschlags Die Spalte SUGGEST_COLUMN_INTENT_DATA wird zum Neuschreiben der Abfrage verwendet. Text. Verwenden Sie dieses Argument nur mit URIs oder anderen Datenformaten, die für den Nutzer sichtbar sind, z. B. HTTP-URLs. Keine internen URI-Schemata zum Überschreiben verwenden die Abfrage auf diese Weise an.
  • Geben Sie im Feld SUGGEST_COLUMN_QUERY der Tabelle mit Vorschlägen. Wenn dieses vorhanden ist und einen Wert für den aktuellen Vorschlag enthält, zum Umschreiben des Abfragetexts und Überschreiben einer der vorherigen Implementierungen.

Suchvorschläge im Schnellsuchfeld anzeigen

Nachdem Sie Ihre App für benutzerdefinierte Suchvorschläge konfiguriert haben, können Sie für das weltweit zugängliche Schnellsuchfeld ist so einfach wie das Bearbeiten Ihre durchsuchbare Konfiguration so, dass sie android:includeInGlobalSearch durch den Wert "true".

Zusätzliche Arbeit ist nur erforderlich, wenn deine Inhalte fordert der Anbieter eine Leseberechtigung an. In diesem Fall müssen Sie <path-permission>-Element für den Anbieter, um Schnellzugriff zu gewähren Lesezugriff des Suchfelds auf Ihren Contentanbieter, wie unten dargestellt Beispiel:

<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 diesem Beispiel schränkt der Anbieter den Lese- und Schreibzugriff auf den Inhalt ein. Das <path-permission>-Element ändert die Einschränkung um Es wird Lesezugriff auf Inhalte im "/search_suggest_query" gewährt Pfadpräfix, wenn die Berechtigung "android.permission.GLOBAL_SEARCH" existiert. Hierdurch wird Zugriff auf das Schnellsuchfeld gewährt, damit es Ihren Inhalt abfragen kann. Anbieter für Vorschläge.

Wenn Ihr Contentanbieter keine Leseberechtigungen erzwingt, Standardmäßig wird dies in Box vorgelesen.

Vorschläge auf einem Gerät aktivieren

Standardmäßig sind Apps nicht für die Bereitstellung von Vorschlägen im Schnellsuchfeld aktiviert. auch wenn sie entsprechend konfiguriert sind. Die Nutzenden entscheiden, ob Vorschläge aus Ihrer App im Schnellsuchfeld erhalten, indem Sie Suchbare Elemente – in den Einstellungen > Suchen und aktivieren Sie Ihre als durchsuchbares Element suchen können.

Jede für das Schnellsuchfeld verfügbare App hat einen Eintrag im Einstellungsseite für Durchsuchbare Elemente. Der Eintrag enthält den Namen der App. und eine kurze Beschreibung der Inhalte, die in der App gesucht werden können, und für Vorschläge im Schnellsuchfeld verfügbar. Um den Beschreibungstext zu definieren für deine durchsuchbare App: android:searchSettingsDescription hinzufügen Attribut für Ihre durchsuchbare Konfiguration, wie im Folgenden Beispiel:

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

Der String für android:searchSettingsDescription sollte so prägnant sein und geben Sie an, welche Inhalte suchbar sind. Zum Beispiel: „Künstler, Alben und Titel“ für eine Musik-App oder „Gespeicherte Notizen“ für eine Notepad-App. Diese Beschreibung ist wichtig, damit die Nutzenden wissen, werden unterbreitet. Geben Sie dieses Attribut immer an, android:includeInGlobalSearch ist „true“.

Der Nutzer muss das Menü „Einstellungen“ aufrufen, um Suchvorschläge zu aktivieren. Wenn die Suche ein wichtiger Aspekt für Ihre App ist, überlegen Sie, wie Sie Ihren Nutzenden vermitteln können. Beispielsweise können Sie beim ersten Mal Eine nutzende Person startet die App, in der erklärt wird, wie Suchvorschläge für die Schnellsuche aktiviert werden. Suchfeld.

Tastenkombinationen für Vorschläge im Schnellsuchfeld verwalten

Vorschläge, die der Nutzer im Schnellsuchfeld auswählt, können automatisch zu Abkürzungen machen. Dies sind Vorschläge, die das System aus Ihrem Content-Provider, sodass er schnell auf den Vorschlag zugreifen kann, Ihren Contentanbieter noch einmal abfragen.

Standardmäßig ist diese Option für alle über die Schnellsuche abgerufenen Vorschläge aktiviert. ändern. Wenn sich Ihre Vorschlagsdaten jedoch im Laufe der Zeit ändern, können Sie anfordern, die Tastenkombinationen aktualisiert werden. Wenn sich Ihre Vorschläge z. B. auf dynamische etwa den Anwesenheitsstatus eines Kontakts, und fordern Sie den Vorschlag an, werden aktualisiert, wenn sie dem Nutzer angezeigt werden. Fügen Sie dazu den Parameter SUGGEST_COLUMN_SHORTCUT_ID in der Tabelle mit Vorschlägen. Sie können um das Verhalten der Kurzbefehle für jeden Vorschlag in einer der auf folgende Arten:

  • Stellen Sie sicher, dass das Schnellsuchfeld Ihren Contentanbieter erneut abfragt, um eine neue Version der Tastenkombination für Vorschläge.

    Geben Sie in der Spalte SUGGEST_COLUMN_SHORTCUT_ID einen Wert für Der Vorschlag wird jedes Mal abgefragt, wenn die Tastenkombination für eine neue Version abgefragt wird. angezeigt wird. Die Verknüpfung wird schnell mit den Daten angezeigt, erst kürzlich verfügbar, bis die Aktualisierungsabfrage zurückgegeben wird. wird der Vorschlag mit den neuen Informationen aktualisiert. Die Aktualisierungsabfrage ist an Ihren Contentanbieter mit dem folgenden URI-Pfad gesendet: SUGGEST_URI_PATH_SHORTCUT anstelle von SUGGEST_URI_PATH_QUERY.

    Sorgen Sie dafür, dass die zurückgegebene Cursor einen Vorschlag enthält. Verwenden Sie dazu den Parameter dem ursprünglichen Vorschlag entsprechen oder leer sein. Dies bedeutet, ist nicht mehr gültig. In diesem Fall verschwindet der Vorschlag. und die Verknüpfung wird entfernt.

    Wenn ein Vorschlag auf Daten verweist, deren Aktualisierung länger dauern kann, z. B. können Sie auch die Funktion SUGGEST_COLUMN_SPINNER_WHILE_REFRESHING zu Ihrem mit dem Wert „true“, um ein rotierendes Ladesymbol für die rechts, bis die Aktualisierung abgeschlossen ist. Alle Werte außer „true“ das rotierende Ladesymbol für den Fortschritt.

  • Verhindert, dass der Vorschlag in eine Verknüpfung kopiert wird.

    Geben Sie im FeldSUGGEST_NEVER_MAKE_SHORTCUT SUGGEST_COLUMN_SHORTCUT_ID. In diesem Fall wird der Vorschlag nie in eine Verknüpfung kopiert. Dies ist nur notwendig, wenn Sie dass der zuvor kopierte Vorschlag nicht angezeigt werden soll. Wenn Sie einen normalen Wert für die Spalte an, dann können Sie wird nur so lange angezeigt, bis die Abfrage zum Aktualisieren zurückgegeben wird.

  • Wenden Sie das Standardverhalten für Verknüpfungen an.

    Lassen Sie SUGGEST_COLUMN_SHORTCUT_ID jeweils leer. der sich nicht ändert und als .

Falls sich keiner Ihrer Vorschläge ändert, müssen Sie den SUGGEST_COLUMN_SHORTCUT_ID.

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

Ranking von Vorschlägen im Schnellsuchfeld

Sobald Sie die Suchvorschläge Ihrer App im Schnellsuchfeld verfügbar gemacht haben, Das Ranking des Schnellsuchfelds bestimmt, wie die Vorschläge Nutzer für eine bestimmte Suchanfrage. Das kann davon abhängen, wie viele andere Apps Ergebnisse dieser Suchanfrage und wie oft Nutzer Ihre Ergebnisse im Vergleich zu aus anderen Apps. Wir können nicht garantieren, dass Ihre Vorschläge oder ob die Vorschläge Ihrer App bei einer bestimmten Suchanfrage überhaupt angezeigt werden. In im Allgemeinen erhöht sich die Wahrscheinlichkeit, werden Vorschläge an einer gut sichtbaren Position präsentiert und Apps, die Vorschläge von geringer Qualität erhalten eher ein niedrigeres Ranking oder werden gar nicht angezeigt.