Wdrożenie wyszukiwarki z pomocą systemu Android – czyli przekazywanie zapytań do aktywności i dostarczania sugestii wyszukiwania – aplikacja musi udostępniać wyszukiwanie w postaci pliku XML.
Na tej stronie opisujemy plik konfiguracji wyszukiwania pod względem jego składni i zastosowania. Więcej na temat wdrażania funkcji wyszukiwania w aplikacji można znaleźć w Utwórz interfejs wyszukiwania.
- lokalizacja pliku:
- ) Android używa nazwy pliku jako identyfikatora zasobu.
- składnia:
-
<?xml version="1.0" encoding="utf-8"?> <searchable xmlns:android="http://schemas.android.com/apk/res/android" android:label="string resource" android:hint="string resource" android:searchMode=["queryRewriteFromData" | "queryRewriteFromText"] android:searchButtonText="string resource" android:inputType="
inputType
" android:imeOptions="imeOptions
" android:searchSuggestAuthority="string" android:searchSuggestPath="string" android:searchSuggestSelection="string" android:searchSuggestIntentAction="string" android:searchSuggestIntentData="string" android:searchSuggestThreshold="int" android:includeInGlobalSearch=["true" | "false"] android:searchSettingsDescription="string resource" android:queryAfterZeroResults=["true" | "false"] android:voiceSearchMode=["showVoiceSearchButton" | "launchWebSearch" | "launchRecognizer"] android:voiceLanguageModel=["free-form" | "web_search"] android:voicePromptText="string resource" android:voiceLanguage="string" android:voiceMaxResults="int" > <actionkey android:keycode="KEYCODE
" android:queryActionMsg="string" android:suggestActionMsg="string" android:suggestActionMsgColumn="string" /> </searchable> - elementy:
-
<searchable>
- Określa wszystkie konfiguracje wyszukiwania używane przez system Android do obsługi wyszukiwania wspomaganego.
Atrybuty:
android:label
- Zasób ciągu znaków. (Wymagane). Nazwa aplikacji. Musi być taka sama jak
nazwa zastosowana do atrybutu
android:label
Twojego pliku<activity>
. lub<application>
manifestu. Ta etykieta jest widoczna dla użytkownika tylko wtedy, gdy ustawisz Odandroid:includeInGlobalSearch
do"true"
– w takim przypadku używana jest etykieta w ustawieniach wyszukiwania systemu, aby zidentyfikować aplikację jako element, który można wyszukać. android:hint
- Zasób ciągu znaków. Jest to zalecane. Tekst do wyświetlenia w polu tekstowym wyszukiwania, gdy
nie wpisano tekstu. Zawiera ona wskazówkę dla użytkownika na temat tego, jakie treści można wyszukać. Dla spójności
z innymi aplikacjami na Androida, sformatuj ciąg tekstowy
android:hint
jako „Szukaj <content-or-product>”. Na przykład „Szukaj utworów i wykonawców”. lub „Szukaj w YouTube”. android:searchMode
- Słowo kluczowe. Ustawia dodatkowe tryby sterujące odtwarzaniem prezentacji. Dostępny(-a)
tryby określają sposób przepisywania tekstu zapytania, gdy otrzymana sugestia niestandardowa
ostrość. Akceptowane są te wartości trybu:
Wartość Opis "queryRewriteFromData"
Użyj wartości z SUGGEST_COLUMN_INTENT_DATA
na przeredagowanie tekstu zapytania. Tej opcji należy używać tylko wtedy, gdy wartości w argumencieSUGGEST_COLUMN_INTENT_DATA
nadają się do sprawdzania i edytowania przez użytkowników, takich jak identyfikatory URI HTTP."queryRewriteFromText"
Użyj wartości z atrybutu SUGGEST_COLUMN_TEXT_1
w celu zmiany tekstu zapytania.Więcej informacji znajdziesz w dokumentacji na temat przepisywania tekstu zapytania w Dodawanie niestandardowych sugestii wyszukiwania.
android:searchButtonText
- Zasób ciągu znaków. Tekst do wyświetlenia na przycisku uruchamiającym wyszukiwanie. Według domyślnie, na przycisku wyświetla się ikona wyszukiwania (lupa), która jest idealna internacjonalizacji. Nie używaj więc tego atrybutu do zmiany przycisku, chyba że zachowanie czegoś innego niż wyszukiwanie, np. żądania adresu URL w przeglądarce.
android:inputType
- Słowo kluczowe. Określa typ używanej metody wprowadzania, na przykład rodzaj łagodnego dźwięku
klawiatury. W przypadku większości wyszukiwań, w których dozwolony jest tekst swobodny, nie potrzebujesz tego atrybutu.
Listę tych kategorii znajdziesz na stronie
inputType
odpowiednie wartości tego atrybutu. android:imeOptions
- Słowo kluczowe. Udostępnia dodatkowe opcje metody wprowadzania. W przypadku większości wyszukiwań:
który tekst swobodny jest oczekiwany, nie potrzebujesz tego atrybutu. Domyślny edytor IME to
actionSearch
z „wyszukiwaniem” zamiast znaku przejścia do nowej linii w klawiatura programowa. ZobaczimeOptions
, gdzie znajdziesz listę odpowiednich wartości dla tego atrybutu.
Atrybuty sugestii wyszukiwania
Jeśli zdefiniujesz dostawcę treści, aby generować sugestie wyszukiwania, musisz zdefiniować atrybutów dodatkowych, które konfigurują komunikację z dostawcą treści. Podczas udostępniania wyszukiwania sugestie, potrzebujesz niektórych z tych atrybutów
<searchable>
:
android:searchSuggestAuthority
- Ciąg znaków. (Wymagane do wyświetlania sugestii wyszukiwania). Ta wartość musi pasować do
ciąg urzędowy podany w
android:authorities
w elemencie<provider>
manifestu Androida. android:searchSuggestPath
- Ciąg znaków. Ta ścieżka jest używana jako część sugestii
zapytanie
Uri
, po prefiksie i a przed standardową ścieżką sugestii. Jest to wymagane tylko wtedy, gdy masz udostępniającego różne typy sugestii dostawcy treści, np. dla różnych typów danych. Potrzebny jest też sposób na rozróżnianie sugestii zapytań, które otrzymujesz, . android:searchSuggestSelection
- Ciąg znaków. Ta wartość jest przekazywana do
jako parametru
selection
. Zwykle jest to klauzula WHERE dla bazy danych i musi zawierać pojedynczy znak zapytania działający jako obiekt zastępczy rzeczywisty ciąg zapytania wpisany przez użytkownika, np."query=?"
. Pamiętaj jednak: możesz też użyć dowolnej wartości niepustej, aby wyzwolić dostarczenie tekstu zapytania za pomocą funkcjiselectionArgs
, a potem zignoruj parametrselection
). android:searchSuggestIntentAction
- Ciąg znaków. Domyślne działanie dotyczące intencji, które zostanie zastosowane, gdy użytkownik
kliknie niestandardową sugestię wyszukiwania, np.
"android.intent.action.VIEW"
. Jeśli ta wartość nie zostanie zastąpiona przez wybraną sugestię za pomocą parametruSUGGEST_COLUMN_INTENT_ACTION
kolumny, wartość jest umieszczana w polu działania sekcjiIntent
, gdy użytkownik kliknie reklamę jako sugestię. android:searchSuggestIntentData
- Ciąg znaków. Domyślne dane o zamiarach używane, gdy użytkownik
klika niestandardową sugestię wyszukiwania.
Jeśli nie zostanie zastąpiona przez wybraną sugestię, za pomocą
SUGGEST_COLUMN_INTENT_DATA
kolumny – ta wartość jest umieszczana w polu danych funkcjiIntent
, gdy użytkownik kliknie reklamę jako sugestię. android:searchSuggestThreshold
- Liczba całkowita. Minimalna liczba znaków wymagana do powoduje wyszukanie sugestii. Gwarantuje to tylko, że system nie wyśle zapytania dostawcy treści w przypadku czegoś krótszego niż wartość progowa. Wartością domyślną jest 0.
Więcej informacji o powyższych atrybutach sugestii wyszukiwania znajdziesz w dokumentacji dotyczące dodawania niestandardowych sugestii wyszukiwania oraz dodawania niestandardowych sugestii.
Atrybuty okna szybkiego wyszukiwania
Aby spersonalizowane sugestie wyszukiwania były dostępne w oknie szybkiego wyszukiwania, musisz mieć pewne te atrybuty
<searchable>
:
android:includeInGlobalSearch
- Wartość logiczna. (Wymagane, aby wyświetlać sugestie wyszukiwania w sekcji
Okno szybkiego wyszukiwania). Ustaw na
"true"
, aby otrzymywać sugestie dostępne na całym świecie w Oknie szybkiego wyszukiwania. Użytkownik musi: włącz w ustawieniach wyszukiwania w systemie Twoją aplikację jako element do przeszukiwania sugestie są wyświetlane w oknie szybkiego wyszukiwania. android:searchSettingsDescription
- Zasób ciągu znaków. Krótki opis sugestii wyszukiwania, które podany w oknie szybkiego wyszukiwania, który jest wyświetlany w aplikacji. Opis musi zwięźle opisywać treści dostępne dla wyszukiwarki. Dla: na przykład „Wykonawcy, albumy i utwory”. w przypadku aplikacji muzycznej lub „Zapisane notatki”. dla za pomocą notatnika.
android:queryAfterZeroResults
- Wartość logiczna. Ustaw jako
"true"
, jeśli chcesz, by Twoim dostawcą treści był dla nadzbiorów zapytań, które wcześniej nie zwróciły żadnych wyników. Na przykład, jeśli dostawca treści nie zwraca żadnych wyników dla słowa „bo”, trzeba powtórzyć zapytanie dla słowa „jan”. Jeśli ma wartość"false"
, superzbiory są ignorowane podczas jednej sesji – „bob” nie wywołuje ponownego zapytania. Ta informacja jest ważna tylko w okresie ważności okna wyszukiwania lub aktywność podczas korzystania z widżetu wyszukiwania. Po ponownym otwarciu okna wyszukiwania lub aktywności „bo” ponownie wysyła zapytanie do dostawcy treści. Wartość domyślna to false (fałsz).
Atrybuty wyszukiwania głosowego
Aby włączyć wyszukiwanie głosowe, musisz mieć te atrybuty
<searchable>
:
android:voiceSearchMode
- Słowo kluczowe. (Wymagane do udostępniania funkcji wyszukiwania głosowego).
Włącza wyszukiwanie głosowe z określonym trybem wyszukiwania głosowego.
Wyszukiwanie głosowe może nie być dostępne na urządzeniu. W takim przypadku te oznaczenia
nie mają żadnego skutku. Akceptowane są te wartości trybu:
Wartość Opis "showVoiceSearchButton"
Wyświetl przycisk wyszukiwania głosowego, jeśli na urządzeniu jest dostępne wyszukiwanie głosowe. Jeśli jest ustawiony, musisz też ustawić wartość "launchWebSearch"
lub"launchRecognizer"
, oddzielając je pionową kreską (|
)."launchWebSearch"
Przycisk wyszukiwania głosowego przenosi użytkownika bezpośrednio z wbudowaną aktywnością związaną z wyszukiwaniem głosowym. Większość aplikacji nie używa tej flagi, ponieważ powoduje to odejście użytkownika od aktywności, która wywołała wyszukiwanie. "launchRecognizer"
Przycisk wyszukiwania głosowego bezpośrednio do wbudowanej funkcji nagrywania głosu. Ta aktywność zachęca użytkownika do mówienia, tworzy transkrypcję wypowiedzianego tekstu i przekazuje dalej wygenerowany tekst do wyszukiwanego hasła, tak jakby użytkownik wpisał go w polu i kliknąłem przycisk wyszukiwania. android:voiceLanguageModel
- Słowo kluczowe. Model językowy,
musi być używany przez system rozpoznawania głosu. Akceptowane są te wartości:
Wartość Opis "free_form"
Używaj swobodnego rozpoznawania mowy do dyktowania zapytań. Jest to przede wszystkim zoptymalizowane pod kątem języka angielskiego. Jest to ustawienie domyślne. "web_search"
Używaj rozpoznawania haseł wyszukiwanych w internecie w przypadku krótszych wyrażeń przypominających wyszukiwanie. To jest dostępny w większej liczbie języków niż "free_form"
.Zobacz
EXTRA_LANGUAGE_MODEL
, aby uzyskać więcej i informacjami o nich. android:voicePromptText
- Zasób ciągu znaków. Dodatkowa wiadomość do wyświetlenia w oknie wprowadzania głosowego.
android:voiceLanguage
- Ciąg znaków. Oczekiwany język mówiony, wyrażony jako wartość ciągu znaków
stałą w
Locale
, np."de"
w przypadku niemieckiego lub"fr"
w przypadku francuskiego. To pole jest potrzebne tylko wtedy, gdy jest inne od bieżącej wartości wynoszącejLocale.getDefault()
. android:voiceMaxResults
- Liczba całkowita. Ustaw maksymalną liczbę wyników do zwrócenia,
razem ze słowem „najlepszy”, który jest zawsze podawany jako
ACTION_SEARCH
podstawowego zapytania intencji. Wartość musi wynosić co najmniej 1. UżywajEXTRA_RESULTS
aby uzyskać wyniki intencji. Jeśli nie zostanie podana, moduł rozpoznawania wybierze liczbę wyników do zwrócenia.
<actionkey>
- Definiowanie klucza urządzenia i zachowania działania związanego z wyszukiwaniem. Działanie wyszukiwania powoduje utworzenie specjalnego
zachowanie po kliknięciu przycisku na urządzeniu, na podstawie bieżącego zapytania lub
sugestii. Na przykład aplikacja Kontakty udostępnia działanie wyszukiwania w celu uruchomienia telefonu
połączenie z aktualnie wybraną sugestię kontaktu po kliknięciu przycisku ZADZWOŃ.
Nie wszystkie klawisze działań są dostępne na każdym urządzeniu i nie wszystkie klawisze można zastąpić w tym sposób. Przykład: „Dom” klucza nie można zastąpić i musi on zawsze wrócić na ekran główny ekranu. Pamiętaj też, aby nie zdefiniować klawisza działania dla klawisza potrzebnego do wpisywania wyszukiwanego hasła zapytania. Ogranicza to liczbę dostępnych i uzasadnionych klawiszy poleceń do przycisku połączenia i menu połączenia. Przycisk
Aby zdefiniować klucz, należy zdefiniować
android:keycode
oraz co najmniej jeden 3 pozostałe atrybuty definiujące działanie związane z wyszukiwaniem.Atrybuty:
android:keycode
- Ciąg znaków. (Wymagane). Kod klucza z
KeyEvent
, który odpowiada klawisz działania, na który chcesz odpowiedzieć, na przykład"KEYCODE_CALL"
. Ten jest dodawane doACTION_SEARCH
, która jest przekazywana do możliwej do wyszukiwania aktywności. Aby sprawdzić kod klucza, użyjgetIntExtra(SearchManager.ACTION_KEY)
Nie wszystkie klawisze działają w przypadku wyszukiwania, bo wiele z nich służy do pisania, nawigacji czy funkcji systemowych. android:queryActionMsg
- Ciąg znaków. Komunikat wyświetlany po naciśnięciu klawisza polecenia
użytkownik wpisuje tekst zapytania. Jest ona dodawana do
ACTION_SEARCH
które system przekazuje do aktywności, którą można przeszukiwać. Aby sprawdzić ciąg znaków, użyj funkcjigetStringExtra(SearchManager.ACTION_MSG)
android:suggestActionMsg
- Ciąg znaków. Komunikat o działaniu, który zostanie wysłany po naciśnięciu klawisza polecenia
sugestia jest widoczna. Jest on dodawany do intencji, którą system przekazuje do
aktywność, którą można przeszukiwać – za pomocą działania zdefiniowanego dla danej sugestii. Aby przeanalizować
ciągu znaków, należy użyć funkcji
getStringExtra(SearchManager.ACTION_MSG)
Tej opcji należy użyć tylko wtedy, gdy wszystkie sugestie obsługują ten klawisz działania. Jeśli nie wszystkie sugestie mogą obsługiwać ten sam klawisz działania, musisz zamiast tego użyćandroid:suggestActionMsgColumn
. android:suggestActionMsgColumn
- Ciąg znaków. Nazwa kolumny u dostawcy treści, która określa
komunikat o działaniu dla tego klawisza działania, który zostanie wysłany, gdy użytkownik naciśnie klawisz działania
a sugestia jest widoczna. Ten atrybut umożliwia kontrolowanie klawisza działania w
nową sugestię, ponieważ zamiast korzystać z
Atrybut
android:suggestActionMsg
określający komunikat o działaniu dla wszystkich sugestie, każdy wpis w systemie dostawcy treści zawiera odrębny komunikat o działaniu.Najpierw musisz zdefiniować kolumnę w usłudze dostawcy treści dla każdej sugestii komunikat o działaniu, a następnie podaj nazwę tej kolumny w tym atrybucie. System sprawdza kursor sugestii, używając podanego tutaj ciągu znaków, aby wybrać działanie w kolumnie wiadomości, a następnie zaznacza kursorem ten ciąg wiadomości. Ten ciąg to który jest dodawany do intencji przekazywanej przez system do aktywności możliwej do wyszukania, za pomocą działania dla sugestii. Aby sprawdzić ciąg znaków, użyj funkcji
getStringExtra(SearchManager.ACTION_MSG)
Jeśli dane dla wybranej sugestii nie istnieją, klawisz działania jest ignorowany.
- przykład:
- Plik XML zapisany o
res/xml/searchable.xml
:<?xml version="1.0" encoding="utf-8"?> <searchable xmlns:android="http://schemas.android.com/apk/res/android" android:label="@string/search_label" android:hint="@string/search_hint" android:searchSuggestAuthority="dictionary" android:searchSuggestIntentAction="android.intent.action.VIEW" android:includeInGlobalSearch="true" android:searchSettingsDescription="@string/settings_description" > </searchable>
res/xml/filename.xml
(