Dodawanie niestandardowych sugestii wyszukiwania

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

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:

  1. System pobiera treść zapytania, czyli to, co wpiszesz i wysyła zapytanie do dostawcy treści, który zarządza sugestie.
  2. Twój dostawca treści zwraca błąd Cursor wskazujący wszystkie sugestie pasujące do wyszukiwanego hasła tekstu.
  3. 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:

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

    Tekst 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 atrybut android: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ą.

  2. projection
    Zawsze ma wartość null.
  3. selection
    Wartość podana w polu android:searchSuggestSelection dostępnego do przeszukiwania pliku konfiguracji, lub wartość null zadeklarować atrybut android:searchSuggestSelection. Jest to szerzej omawiane w następnej sekcji.
  4. 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 zadeklarujesz android:searchSuggestSelection, ten parametr ma wartość null. W następnej sekcji szczegółowo omówiono tę kwestię.
  5. 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 to ACTION_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 makro SUGGEST_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() lub getDataString()

  • 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 z android:searchSuggestIntentData dodaje ukośnik (/), a następnie dodaje odpowiednią wartość z parametru SUGGEST_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 listy SUGGEST_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 kolumnie SUGGEST_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 – zamiast SUGGEST_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 w SUGGEST_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.