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
![](https://developer.android.com/static/images/search/search-suggest-custom.png?authuser=9&hl=de)
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:
- 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.
- Ihr Contentanbieter gibt eine
Cursor
die auf alle Vorschläge verweist, die für die Suchanfrage relevant sind, Text. - 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:
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
/puppiesDer Abfragetext am Ende ist mit URI-Codierungsregeln codiert. Daher können Sie decodieren müssen, bevor eine Suche durchgeführt werden kann.
Der Teil
<ph type="x-smartling-placeholder">optional.suggest.path
ist nur in den URI, wenn Sie einen solchen Pfad in Ihrer durchsuchbaren Konfigurationsdatei mit Attributandroid: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.projection
- Immer null.
selection
- Der in
android:searchSuggestSelection
angegebene Wert Ihrer durchsuchbaren Konfigurationsdatei oder null, wenn Sie das Attributandroid:searchSuggestSelection
deklarieren Die wird dies näher erläutert.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 nichtandroid:searchSuggestSelection
lautet, ist dieser Parameter null. Im folgenden Abschnitt wird dies näher erläutert.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.
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
.
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 vonandroid: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, mitandroid: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 VorschlagsACTION_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 ParameterSUGGEST_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.
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
<ph type="x-smartling-placeholder">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 mitgetData()
ab odergetDataString()
. - 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 SpalteSUGGEST_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 ausandroid:searchSuggestIntentData
, hängt einen Schrägstrich (/) an, und addiert dann den entsprechenden Wert aus derSUGGEST_COLUMN_INTENT_DATA_ID
, um einen vollständigen Inhalt zu bilden URI. Anschließend können Sie denUri
mitgetData()
.
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.
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 demSUGGEST_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 SpalteSUGGEST_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 vonSUGGEST_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 Feld
SUGGEST_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
.
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.