W oknie wyszukiwania na Androidzie lub w widżecie wyszukiwania możesz podać niestandardowe sugestie wyszukiwania utworzone na podstawie danych w Twojej aplikacji. Przykład: jeśli aplikacja pełni funkcję słownika, możesz sugerować ze słownika słowa, które dopasowują tekst wpisany w polu wyszukiwania, zanim użytkownik skończy je wpisywać ich zapytania. Sugestie te są cenne, ponieważ pozwalają skutecznie przewidzieć tego, czego szuka użytkownik, i zapewnić im natychmiastowy dostęp do tych treści. Ilustracja 1 przedstawia przykład w oknie wyszukiwania z niestandardowymi sugestiami.
Po podaniu niestandardowych sugestii możesz je także udostępnić dostępne w całym systemie Okno szybkiego wyszukiwania, umożliwiające dostęp do zawartości .
Zanim dodasz spersonalizowane sugestie, zaimplementuj okno wyszukiwania w Androidzie lub widżet wyszukiwania do zapytań w aplikacji. Więcej informacji znajdziesz w sekcji Tworzenie. interfejsu wyszukiwania Treść usług.
Podstawy
![](https://developer.android.com/static/images/search/search-suggest-custom.png?authuser=9&hl=pl)
Rysunek 1. Zrzut ekranu przedstawiający okno wyszukiwania z niestandardowe sugestie wyszukiwania.
Gdy użytkownik wybierze niestandardową sugestię, system wysyła wiadomość
Intent
na
aktywność, którą można przeszukiwać. W odróżnieniu od zwykłego zapytania, które wysyła intencję z parametrem
ACTION_SEARCH
możesz zamiast tego zdefiniować własne sugestie
ACTION_VIEW
lub
inne działania, które mają związek z Twoim zamiarem. Uwzględnij też dane, które
wybrana sugestia. W przykładzie ze słownika, gdy użytkownik wybierze
sugestia, aplikacja może od razu otworzyć definicję tego słowa,
funkcji wyszukiwania w słowniku dopasowań.
Aby podać niestandardowe sugestie, wykonaj te czynności:
- Zaimplementować podstawowe działanie dostępne do przeszukiwania, tak jak to opisano w Utwórz interfejs wyszukiwania.
- Modyfikowanie konfiguracji umożliwiającej wyszukiwanie na podstawie informacji o treści dostawcy spersonalizowanych sugestii.
- Utwórz tabelę, np. w
SQLiteDatabase
, . - Utwórz treść , który ma dostęp do tabeli sugestii, i zadeklaruj dostawcy w pliku manifestu.
- Określ typ elementu
Intent
, który zostanie wysłany, gdy użytkownik wybierze łącznie z działaniem niestandardowym i danymi niestandardowymi.
Android wyświetla okno wyszukiwania, ale wyświetla też sugestie wyszukiwania. Musisz mieć dostawcę treści, od którego system może wyświetlić sugestie. Odczytano Dostawcy treści znajdziesz wskazówki, jak utworzyć dostawcę treści.
Gdy system wykryje, że aktywność jest dostępna do przeszukiwania i udostępnia sugestie wyszukiwania, po wpisaniu przez użytkownika zapytanie:
- System pobiera treść zapytania, czyli to, co wpiszesz i wysyła zapytanie do dostawcy treści, który zarządza sugestie.
- Twój dostawca treści zwraca błąd
Cursor
wskazujący wszystkie sugestie pasujące do wyszukiwanego hasła tekstu. - System wyświetla listę sugestii podanych przez
Cursor
Po wyświetleniu niestandardowych sugestii mogą wystąpić te sytuacje:
- Jeśli użytkownik wpisze inną literę lub w jakikolwiek sposób zmieni zapytanie, poprzednie kroki zostaną powtórzone, a lista sugestii zostanie odpowiednio zaktualizowana.
- Jeśli użytkownik przeprowadzi wyszukiwanie, sugestie zostaną zignorowane, a
jest uwzględniany w wynikach wyszukiwania
przy użyciu zwykłego wyszukiwania,
Intencja
ACTION_SEARCH
. - Jeśli użytkownik wybierze sugestię, intencja zostanie wysłana do działania z niestandardowymi działaniami i danymi, dzięki którym można uruchomić aplikację proponowane treści.
Modyfikowanie konfiguracji umożliwiającej wyszukiwanie
Aby włączyć obsługę sugestii niestandardowych, dodaj parametr
android:searchSuggestAuthority
do zbioru danych
<searchable>
w przeszukiwalnym pliku konfiguracji,
jak w tym przykładzie:
<?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>
W zależności od typu intencji możesz potrzebować dodatkowych atrybutów dołączanych do każdej sugestii i jak formatować zapytania związane z treścią. dostawcy usług. Inne atrybuty opcjonalne zostały omówione poniżej sekcji.
Utwórz dostawcę treści
Aby utworzyć dostawcę treści na potrzeby niestandardowych sugestii, najpierw zapoznaj się z artykułem
Dostawcy treści
znajdziesz wskazówki, jak utworzyć dostawcę treści. Dostawca treści dla
są podobne do innych dostawców treści. Pamiętaj jednak, że
zgodnie z Twoją sugestią, odpowiedni wiersz w tabeli Cursor
musi
uwzględniać określone kolumny, które system rozumie i wykorzystuje do formatowania
sugestie.
Gdy użytkownik wpisze tekst w oknie wyszukiwania lub w widżecie wyszukiwania, system
pyta dostawcę treści o sugestie, dzwoniąc pod numer
query()
za każdym razem, gdy wprowadzasz jakąś literę. W ramach implementacji interfejsu query()
dostawca treści musi przeszukać dane sugestii i zwrócić
Cursor
wskazuje wiersze, które według niego są prawidłowe
sugestie.
Szczegółowe informacje o tworzeniu dostawcy treści na potrzeby niestandardowych sugestii: w 2 kolejnych sekcjach:
- Obsługa zapytania z sugestią
- Jak system wysyła żądania do dostawcy treści i jak je obsługiwać .
- Tworzenie tabeli sugestii
- jak zdefiniować kolumny, których system oczekuje w kolumnie
Wartość
Cursor
zwrócona z każdym zapytaniem.
Obsługa zapytania dotyczącego sugestii
Gdy system zażąda sugestii od dostawcy treści,
metody query()
dostawcy treści. Zaimplementuj tę metodę, aby:
wyszukać dane sugestii i zwrócić Cursor
wskazujący
i sugestie, które uznasz za istotne.
Oto podsumowanie parametrów, które system przekazuje na Twoją
query()
– wymienione w kolejności:
uri
Zawsze są treściami
Uri
, w formacie następujące:content://your.authority/optional.suggest.path/
SUGGEST_URI_PATH_QUERY
Domyślnym zachowaniem jest przekazywanie tego identyfikatora URI przez system i dołączanie zapytania :
content://your.authority/optional.suggest.path/
SUGGEST_URI_PATH_QUERY
/puppiesTekst zapytania na końcu jest kodowany przy użyciu reguł kodowania URI, dlatego możesz musi go zdekodować przed przeprowadzeniem wyszukiwania.
Część
optional.suggest.path
znajduje się tylko w identyfikatora URI, jeśli ustawisz taką ścieżkę w dostępnym do przeszukiwania pliku konfiguracji atrybutandroid:searchSuggestPath
. Jest to konieczne tylko wtedy, gdy korzystasz z usług tego samego dostawcy treści na potrzeby wielu działań związanych z wyszukiwaniem. Jeśli w takim przypadku określ źródło zapytania z sugestią.projection
- Zawsze ma wartość null.
selection
- Wartość podana w polu
android:searchSuggestSelection
dostępnego do przeszukiwania pliku konfiguracji, lub wartość null zadeklarować atrybutandroid:searchSuggestSelection
. Jest to szerzej omawiane w następnej sekcji.selectionArgs
- Zawiera wyszukiwane hasło jako pierwszy i jedyny element tablicy, jeśli zadeklarujesz atrybut
android:searchSuggestSelection
w konfigurację, którą można przeszukiwać. Jeśli nie zadeklarujeszandroid:searchSuggestSelection
, ten parametr ma wartość null. W następnej sekcji szczegółowo omówiono tę kwestię.sortOrder
- Zawsze ma wartość null.
System może wysłać do Ciebie tekst wyszukiwanego hasła na dwa sposoby. Domyślny sposób to
, aby tekst zapytania był uwzględniany jako ostatnia ścieżka identyfikatora URI treści przekazywanego
parametru uri
. Jeśli jednak uwzględnisz wartość wyboru w atrybucie
android:searchSuggestSelection
konfiguracji Twojej wyszukiwarki
, to tekst zapytania będzie przesyłany jako pierwszy element argumentu
Tablica ciągu selectionArgs
. Te 2 opcje są opisane
co dalej.
Pobierz zapytanie do identyfikatora URI
Domyślnie zapytanie jest dołączane jako ostatni segment uri
– obiekt Uri
. Aby pobrać tekst zapytania w tym
Case, użyj
getLastPathSegment()
,
jak w tym przykładzie:
Kotlin
val query: String = uri.lastPathSegment.toLowerCase()
Java
String query = uri.getLastPathSegment().toLowerCase();
Zwraca ostatni segment listy Uri
, którą jest zapytanie
wpisywany przez użytkownika.
Pobierz zapytanie z argumentów wyboru
Zamiast identyfikatora URI może być bardziej przydatny
Metoda query()
, aby otrzymać wszystko, czego potrzebuje do wykonania
mogą się przydać, by selection
i
selectionArgs
, aby mieć odpowiednie wartości. W tym
dodaj atrybut android:searchSuggestSelection
do
konfigurację, którą można przeszukiwać z ciągiem wyboru SQLite. W zaznaczeniu
użyj znaku zapytania (?) jako symbolu zastępczego,
wyszukiwanego hasła. System wywołuje metodę query()
z ciągiem wyboru jako
parametr selection
i zapytanie jako pierwszy element
w tablicy selectionArgs
.
Możesz na przykład utworzyć
android:searchSuggestSelection
, aby utworzyć pełny tekst
Instrukcja wyszukiwania:
<?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>
W przypadku tej konfiguracji metoda query()
zapewnia
selection
jako "word MATCH ?"
oraz
selectionArgs
jako zapytania. Gdy przekażesz je do
SQLite
query()
jako argumentów, są one syntetyczne
razem, co oznacza, że znak zapytania jest zastępowany tekstem zapytania. Jeśli
otrzymujesz w ten sposób sugestie i musisz dodawać do zapytania symbole wieloznaczne
tekst, dołącz go lub poprzedź do parametru selectionArgs
, ponieważ
należy ją ująć w cudzysłów i wstawić w miejsce znaku zapytania.
Innym atrybutem w poprzednim przykładzie jest
android:searchSuggestIntentAction
, który określa działanie związane z intencją
wysyłane z każdą intencją, gdy użytkownik wybierze sugestię. Jest to omawiane
w dalszej części artykułu Deklaracja zamiaru zakupu
sugestie.
Tworzenie tabeli sugestii
Gdy zwrócisz do systemu sugestie za pomocą tagu Cursor
,
system oczekuje określonych kolumn w każdym wierszu. Niezależnie od tego, czy przechowujesz dane
danych sugestii w bazie danych SQLite na urządzeniu, bazie danych w internecie.
serwera bądź innego formatu na urządzeniu lub w internecie, sformatuj sugestie w postaci wierszy
w tabeli i zaprezentować im Cursor
.
System rozumie kilka kolumn, ale tylko dwie z nich są wymagane:
_ID
- Unikalny identyfikator wiersza dla każdej sugestii. System wymaga tego, aby
prezentuj sugestie w
ListView
SUGGEST_COLUMN_TEXT_1
- Ciąg znaków przedstawiony jako sugestia.
Te kolumny są opcjonalne. Większość z nich została omówiona szerzej w poniższych sekcji.
SUGGEST_COLUMN_TEXT_2
- Ciąg znaków. Jeśli
Cursor
obejmuje tę kolumnę, wtedy wszystkie sugestie są przekazywane w formacie dwuwierszowym. Ciąg w tej kolumnie to wyświetlana jako druga, mniejsza linia tekstu pod główną podpowiedź tekstu. Aby wskazać brak tekstu dodatkowego, pole może mieć wartość null lub puste. SUGGEST_COLUMN_ICON_1
- Możliwy do rysowania ciąg tekstowy zasobu, treści lub identyfikatora URI pliku. Jeśli
Cursor
obejmuje tę kolumnę, a następnie są dostępne wszystkie sugestie jako ikona i tekst z ikoną do rysowania po lewej stronie. Ten może mieć wartość null lub zero, co oznacza brak ikony w tym wierszu. SUGGEST_COLUMN_ICON_2
- Możliwy do rysowania ciąg tekstowy zasobu, treści lub identyfikatora URI pliku. Jeśli
Cursor
obejmuje tę kolumnę, a następnie są dostępne wszystkie sugestie w formacie ikona plus tekst z ikoną po prawej stronie. Może to być wartość null lub 0 oznacza brak ikony w tym wierszu. SUGGEST_COLUMN_INTENT_ACTION
- Ciąg znaków działania intencji. Jeśli ta kolumna istnieje i zawiera wartość w
danego wiersza, zdefiniowane tutaj działanie jest używane podczas tworzenia
intencji. Jeśli element nie zostanie podany, działanie zostanie wykonane na poziomie
Pole
android:searchSuggestIntentAction
w wyszukiwarce konfiguracji. Jeśli działanie jest takie samo dla wszystkich sugestii, lepiej będzie, pozwala na określenie działania za pomocąandroid:searchSuggestIntentAction
i pomiń tę kolumnę. SUGGEST_COLUMN_INTENT_DATA
- Ciąg znaków identyfikatora URI danych. Jeśli ta kolumna istnieje i zawiera wartość w podanym
dane te są używane podczas tworzenia intencji sugestii. Jeśli element
nie zostanie podany, dane będą pobierane z
Pole
android:searchSuggestIntentData
w wyszukiwarce konfiguracji. Jeśli nie podano żadnego źródła, pole danych intencji to wartość null. Jeśli dane są takie same w przypadku wszystkich sugestii lub można je opisać za pomocą stałej części i konkretnego identyfikatora, lepiej jest je określić. przy użyciu:android:searchSuggestIntentData
i pomiń ten element . SUGGEST_COLUMN_INTENT_DATA_ID
- Ciąg ścieżki identyfikatora URI. Jeśli ta kolumna istnieje i zawiera wartość w podanym
wiersz, a następnie „/” a ta wartość jest dołączana do pola danych w intencji.
Używaj tylko wtedy, gdy pole danych określone przez
Atrybut
android:searchSuggestIntentData
w dostępnym do przeszukiwania w konfiguracji jest już ustawiony odpowiedni ciąg bazowy. SUGGEST_COLUMN_INTENT_EXTRA_DATA
- Dane dowolne. Jeśli ta kolumna istnieje i zawiera wartość w danym wierszu,
to są dodatkowe dane używane do tworzenia intencji sugestii.
Jeśli nie podano tej wartości, dodatkowe pole danych intencji ma wartość null. Dzięki tej kolumnie
zawierają dodatkowe dane, które są dołączane
intencji
EXTRA_DATA_KEY
. SUGGEST_COLUMN_QUERY
- Jeśli ta kolumna istnieje, a ten element występuje w danym wierszu, jest to
dane używane do tworzenia zapytania sugestii, uwzględnione jako
w tekście reklamy
QUERY
. Wymagana, jeśli działanie sugestii toACTION_SEARCH
, ale w przeciwnym razie – opcjonalne. SUGGEST_COLUMN_SHORTCUT_ID
- Używane tylko przy wyświetlaniu sugestii dotyczących Okna szybkiego wyszukiwania. Ta kolumna
wskazuje, czy sugestia wyszukiwania musi być zapisana jako skrót i
czy musi być weryfikowana. Skróty są zwykle tworzone, gdy użytkownik
klika sugestię z okna szybkiego wyszukiwania. Jeśli jej nie ma, wynik jest przechowywany jako
jako skrót i nigdy. Jeśli jest ustawiona na
SUGGEST_NEVER_MAKE_SHORTCUT
, wynik nie zostanie zapisany jako skrót. W przeciwnym razie identyfikator skrótu służy do sprawdź tutaj aktualną sugestię za pomocąSUGGEST_URI_PATH_SHORTCUT
SUGGEST_COLUMN_SPINNER_WHILE_REFRESHING
- Używane tylko przy wyświetlaniu sugestii dotyczących Okna szybkiego wyszukiwania. Ta kolumna
wskazuje, że zamiast ikony z
SUGGEST_COLUMN_ICON_2
, a skrót do tej sugestii to odświeżenie w oknie szybkiego wyszukiwania.
Większość z tych kolumn została szczegółowo omówiona w dalszej części tego artykułu.
Deklarowanie zamiaru wyświetlania sugestii
Gdy użytkownik wybierze sugestię z listy wyświetlanej pod
w oknie wyszukiwania lub w widżecie, system wyśle niestandardowy Intent
do Twojego
aktywność, którą można przeszukiwać. Musisz zdefiniować działanie i dane intencji.
Deklarowanie działania intencji
Najczęstszym działaniem powodującym zamiar zakupu w przypadku sugestii niestandardowej jest
ACTION_VIEW
, która jest odpowiednia, gdy chcesz coś otworzyć,
np. definicja słowa, dane kontaktowe lub strona internetowa.
Działaniem intencji może być jednak dowolne inne działanie, które może być różne w zależności od wybranego działania
sugestii.
W zależności od tego, czy chcesz, aby wszystkie sugestie używały tego samego działania intencji, możesz zdefiniować działanie na dwa sposoby:
- Użyj atrybutu
android:searchSuggestIntentAction
swojej witryny plik konfiguracji, który można przeszukiwać, aby zdefiniować działanie dla wszystkich sugestii. w tym przykładzie:<?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>
- Za pomocą kolumny
SUGGEST_COLUMN_INTENT_ACTION
możesz zdefiniować dla poszczególnych sugestii. Aby to zrobić, dodaj makroSUGGEST_COLUMN_INTENT_ACTION
kolumnę do tabeli sugestii W przypadku każdej sugestii określ w niej działanie, którego chcesz użyć, np."android.intent.action.VIEW"
Możesz też połączyć 2 metody. Na przykład możesz dołączyć parametr
Atrybut android:searchSuggestIntentAction
z działaniem
będzie używany domyślnie ze wszystkimi sugestiami, a następnie zastąp to działanie dla niektórych
sugestii, deklarując inne działanie w
SUGGEST_COLUMN_INTENT_ACTION
. Jeśli nie podasz wartości
w kolumnie SUGGEST_COLUMN_INTENT_ACTION
, intencja
w atrybucie android:searchSuggestIntentAction
ma wartość
.
Deklarowanie danych intencji
Gdy użytkownik wybierze sugestię, aktywność, którą można przeszukiwać, otrzyma
z zamiarem związanym z działaniem
określanym przez Ciebie – jak omówiliśmy to wcześniej.
– ale intencja musi też zawierać dane dotyczące Twojej aktywności, by zidentyfikować
która sugestia została wybrana. Dane muszą być niepowtarzalne,
dla każdej sugestii, np. identyfikator wiersza tej sugestii w tabeli SQLite.
Po odebraniu intencji możesz pobrać załączone dane za pomocą
getData()
lub
getDataString()
Dane uwzględnione w intencji możesz zdefiniować na 2 sposoby:
- Zdefiniuj dane dla każdej sugestii w kolumnie
SUGGEST_COLUMN_INTENT_DATA
kolumna tabeli sugestii.Podaj wszystkie niezbędne informacje o każdej intencji w sugestiach przez uwzględnienie kolumny
SUGGEST_COLUMN_INTENT_DATA
i a potem wypełnianie jej unikalnymi danymi dla każdego wiersza. Dane z tej kolumny jest powiązany z intencją dokładnie w takiej postaci, w jakiej zdefiniujesz ją w tej kolumnie. Dostępne opcje i pobierz ją za pomocągetData()
lubgetDataString()
- Podziel identyfikator URI danych na 2 części: część wspólną dla wszystkich sugestii
i unikalną dla każdej sugestii. Umieść te części w
Atrybut
android:searchSuggestintentData
elementu do przeszukiwania i kolumnęSUGGEST_COLUMN_INTENT_DATA_ID
w tabeli sugestii.Poniższy przykład pokazuje, jak zadeklarować fragment identyfikatora URI, który jest wspólne dla wszystkich sugestii w Atrybut
android:searchSuggestIntentData
dostępnych do przeszukiwania Konfiguracja:<?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>
Uwzględnij końcową ścieżkę każdej sugestii (niepowtarzalną część) w kolumnę
SUGGEST_COLUMN_INTENT_DATA_ID
z sugestiami tabeli. Gdy użytkownik wybierze sugestię, system pobierze ciąg znaków zandroid:searchSuggestIntentData
dodaje ukośnik (/), a następnie dodaje odpowiednią wartość z parametruSUGGEST_COLUMN_INTENT_DATA_ID
kolumnę, aby utworzyć pełną treść. Identyfikator URI. Następnie możesz pobraćUri
za pomocągetData()
Dodaj więcej danych
Jeśli chcesz przekazać więcej informacji w związku z Twoim zamiarem, możesz dodać kolejne
kolumnę tabeli, taką jak SUGGEST_COLUMN_INTENT_EXTRA_DATA
, która może
przechowywać dodatkowe informacje na temat sugestii. Dane zapisane w tej kolumnie
znajduje się w elemencie EXTRA_DATA_KEY
dodatkowego pakietu intencji.
Obsługa intencji
Po przesłaniu niestandardowych sugestii wyszukiwania z niestandardowymi intencjami musisz spełniać te wymagania:
Twojej możliwej do przeszukiwania aktywności, aby obsłużyć te intencje, gdy użytkownik wybierze
sugestii. Jest to uzupełnienie obsługi ACTION_SEARCH
do intencji użytkownika. Oto przykład,
możesz obsługiwać intencje podczas
onCreate()
wywołanie zwrotne:
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); }
W tym przykładzie działanie intencji to ACTION_VIEW
, a dane
zawiera pełny identyfikator URI wskazujący sugerowany element, utworzony przez
Ciąg znaków android:searchSuggestIntentData
oraz
Kolumna SUGGEST_COLUMN_INTENT_DATA_ID
. Identyfikator URI zostaje przesłany do
lokalnej metody showResult()
, która wysyła zapytanie do dostawcy treści
element określony przez identyfikator URI.
Przeredaguj tekst zapytania
Domyślnie, jeśli użytkownik będzie poruszać się po liście sugestii za pomocą za pomocą przycisków kierunkowych, np. kulki lub pada kierunkowego, tekst zapytania nie będzie . Można jednak tymczasowo przeredagować tekst zapytania użytkownika w takiej postaci, w jakiej jest on wyświetlany z zapytaniem pasującym do zaznaczonej sugestii. Dzięki temu funkcja użytkownik widzi proponowane zapytanie i może kliknąć pole wyszukiwania przed wysłaniem go jako zapytania.
Możesz zmienić treść zapytania na jeden z tych sposobów:
- Dodaj atrybut
android:searchMode
do atrybutu wyszukiwania konfiguracji z wartością"queryRewriteFromText"
. W tym treść z listySUGGEST_COLUMN_TEXT_1
sugestii jest używana do przepisywania tekstu zapytania. - Dodaj atrybut
android:searchMode
do możliwych do wyszukania\ konfiguracji z wartością"queryRewriteFromData"
. W tym treść z sugestii do przepisywania zapytania w kolumnieSUGGEST_COLUMN_INTENT_DATA
. tekstu. Używaj go wyłącznie w przypadku identyfikatorów URI lub innych formatów danych, które powinny widoczne dla użytkowników, na przykład adresy URL HTTP. Nie używaj wewnętrznych schematów URI do przepisywania w ten sposób. - Podaj unikalny ciąg tekstowy zapytania w sekcji
SUGGEST_COLUMN_QUERY
kolumna tabeli sugestii. Jeśli jest obecna i zawiera wartość dla bieżącej sugestii, służy do zmiany tekstu zapytania i zastąpienia dowolnej z poprzednich implementacji.
Wyświetlanie sugestii wyszukiwania w oknie szybkiego wyszukiwania
Po skonfigurowaniu w aplikacji wyświetlania niestandardowych sugestii wyszukiwania,
dostępne dla dostępnego globalnie okna szybkiego wyszukiwania jest tak proste, jak wprowadzenie zmian
którą można przeszukiwać,
android:includeInGlobalSearch
z wartością
"true"
Jedyna sytuacja, w której trzeba wykonać dodatkową pracę,
to utworzenie treści,
wymaga uprawnień do odczytu. W takim przypadku musisz dodać atrybut
Element <path-permission>
, który dostawca może przyznać Szybkie
Uprawnienia do odczytu pola wyszukiwania w systemie dostawcy treści, zgodnie z poniższym opisem
przykład:
<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>
W tym przykładzie dostawca ogranicza uprawnienia do odczytu i zapisu treści.
Element <path-permission>
zmienia ograniczenie przez
przyznawania dostępu z możliwością odczytu do treści wewnątrz "/search_suggest_query"
prefiks ścieżki, gdy uprawnienie "android.permission.GLOBAL_SEARCH"
istnieje. Daje to dostęp do okna szybkiego wyszukiwania, dzięki czemu może wysyłać zapytania dotyczące Twojej treści
.
Jeśli dostawca treści nie wymusza uprawnień do odczytu, użyj funkcji Szybkie wyszukiwanie. Box domyślnie go odczytuje.
Włączanie sugestii na urządzeniu
Domyślnie aplikacje nie są włączone, aby wyświetlać sugestie w oknie szybkiego wyszukiwania. nawet jeśli są tak skonfigurowane. Użytkownik decyduje, czy ma być uwzględniany sugestie z aplikacji w oknie szybkiego wyszukiwania – wystarczy otworzyć plik dla wyszukiwarki – w Ustawieniach > i włącz wyszukiwanie jako łatwego do wyszukania elementu.
Każda aplikacja dostępna dla okna szybkiego wyszukiwania ma wpis w
Strona ustawień elementów do przeszukiwania. Wpis zawiera nazwę aplikacji
oraz krótki opis treści dostępnych dla wyszukiwarki
w aplikacji,
dostępny w przypadku sugestii w Oknie szybkiego wyszukiwania. Aby zdefiniować tekst opisu
dla swojej aplikacji, którą można przeszukiwać, dodaj android:searchSettingsDescription
do swojej konfiguracji, jak w poniższym przykładzie
przykład:
<?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>
Ustaw ciąg tekstowy android:searchSettingsDescription
jako zwięzły
oraz określać treści dostępne dla wyszukiwarki. Na przykład „Wykonawcy,
albumy i utwory” w przypadku aplikacji muzycznej lub „Zapisane notatki”. w przypadku aplikacji do obsługi notatnika.
Podanie tego opisu jest ważne, ponieważ pozwala użytkownikowi zorientować się, jakiego rodzaju
dostępnych jest kilka sugestii. Zawsze podawaj ten atrybut, gdy
android:includeInGlobalSearch
to prawda.
Ponieważ użytkownik musi otworzyć menu ustawień, aby włączyć sugestie wyszukiwania Jeśli wyszukiwanie jest ważnym aspektem aplikacji, zastanów się, przekazać tę informację użytkownikom. Możesz na przykład po raz pierwszy podać notatkę użytkownik uruchamia aplikację, która wyjaśnia, jak włączyć sugestie wyszukiwania w funkcji Szybkie. Pole wyszukiwania.
Zarządzaj skrótami sugestii Okna szybkiego wyszukiwania
Sugestie, które użytkownik wybiera w oknie szybkiego wyszukiwania, mogą być generowane automatycznie w skróty. To są sugestie, które system skopiuje z dostawcy treści, aby mógł szybko uzyskać dostęp do sugestii bez konieczności ponownie wysłać zapytanie do dostawcy treści.
Domyślnie ta opcja jest włączona dla wszystkich sugestii pobieranych przez szybkie wyszukiwanie.
Box, ale jeśli dane sugestii ulegną zmianie, możesz o to poprosić
skróty zostaną odświeżone. Na przykład, jeśli Twoje sugestie dotyczą dynamicznych reklam w wyszukiwarce
takie jak stan obecności kontaktu, a następnie poprosić o dodanie sugestii
skróty będą odświeżane po wyświetleniu użytkownikowi. Aby to zrobić, dołącz parametr
SUGGEST_COLUMN_SHORTCUT_ID
w tabeli sugestii. Za pomocą
w tej kolumnie, aby skonfigurować działanie skrótów dla każdej sugestii w jednej z
w następujący sposób:
Ustaw Okno szybkiego wyszukiwania w celu ponownego wysyłania zapytań do dostawcy treści wersji skrótu do sugestii.
Podaj wartość w kolumnie
SUGGEST_COLUMN_SHORTCUT_ID
dla: sugestia ponownego wysyłania zapytań o nową wersję przy każdym użyciu skrótu. Skrót szybko wyświetla się wraz z najbardziej istotnymi danymi dostępnych w ostatnim czasie, dopóki zapytanie odświeży nie zwróci zapytania, w którym sugestia została odświeżona na podstawie nowych informacji. Zapytanie odświeżania to wysłane do dostawcy treści ze ścieżką URI:SUGGEST_URI_PATH_SHORTCUT
– zamiastSUGGEST_URI_PATH_QUERY
Ustaw pole
Cursor
, by zawierało 1 sugestię, korzystając z tych samych kolumn co pierwotna sugestia lub być puste, co oznacza, że skrót jest już nieważny – wówczas sugestia znika, a skrót zostanie usunięty.Jeśli jakaś sugestia odnosi się do danych, których odświeżenie może potrwać dłużej, takich jak według sieci, możesz też dodać parametr
SUGGEST_COLUMN_SPINNER_WHILE_REFRESHING
kolumnę do tabeli sugestii z wartością „true”, aby wyświetlać wskaźnik postępu ikonę prawej strony do chwili zakończenia odświeżania. Dowolna wartość inna niż true nie wyświetla wskaźnika postępu.Zapobiega kopiowaniu sugestii do skrótu.
Podaj wartość
SUGGEST_NEVER_MAKE_SHORTCUT
wSUGGEST_COLUMN_SHORTCUT_ID
. W tym przypadku parametr sugestia nigdy nie jest kopiowana do skrótu. Jest to konieczne tylko wtedy, gdy nie chcesz, aby wcześniej skopiowana sugestia była wyświetlana. Jeśli wpisz normalną wartość kolumny, a następnie skrót sugestii jest wyświetlane dopiero po zwróceniu zapytania odświeżania.Zastosuj domyślne działanie skrótu.
Pozostaw pole
SUGGEST_COLUMN_SHORTCUT_ID
puste w każdym z nich sugestia, która nie zmienia się i można zapisać jako skrótu.
Jeśli żadna z Twoich sugestii się nie zmieni, nie musisz już dodawać
SUGGEST_COLUMN_SHORTCUT_ID
.
Informacje o rankingu sugestii okna szybkiego wyszukiwania
Po udostępnieniu sugestii wyszukiwania w oknie szybkiego wyszukiwania, ranking okna szybkiego wyszukiwania określa, w jaki sposób sugestie są wyświetlane użytkownika przy konkretnym zapytaniu. Może to zależeć od tego, ile innych aplikacji dla tego zapytania oraz jak często użytkownicy wybierają Twoje wyniki w porównaniu z tych z innych aplikacji. Nie ma gwarancji co do tego, jak będą wyglądać Twoje sugestie czy w ogóle pojawią się sugestie aplikacji dla danego zapytania. W ogólne, udostępnianie wysokiej jakości wyników zwiększa prawdopodobieństwo, sugestie są wyświetlane w dobrze widocznym miejscu, a aplikacje, które oferują a sugestie o niskiej jakości będą miały niższą pozycję w rankingu lub nie będą wyświetlane.