Android 8.0 rozszerza możliwości wyszukiwania w menu Ustawienia. Z tego dokumentu dowiesz się, jak dodać ustawienie i zadbać o to, aby było ono prawidłowo indeksowane w wyszukiwarce ustawień.
Tworzenie ustawień możliwych do zindeksowania
Każdy fragment ustawień, który ma być indeksowany, implementuje interfejs Indexable
oraz wymaga stałego pola:
public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER
Po skonfigurowaniu fragmentu pod kątem indeksowania dodaj go do
SearchIndexableResources
, który znajdziesz na stronie:
packages/apps/Settings/src/com/android/settings/search/SearchIndexableResources.java
Metody opcjonalne
Ten interfejs SearchIndexProvider
ma 4 opcjonalne metody.
getXmlResourcesToIndex
- Zastąp tę wartość, jeśli fragment pochodzi z:
preference xml
- Zwraca preferencję XML jako listę do zindeksowania.
Przykład zasobów XML:
public List<SearchIndexableResource> getXmlResourcesToIndex(Context context, boolean enabled) { ArrayList<SearchIndexableResource> result = new ArrayList<SearchIndexableResource>(); SearchIndexableResource sir = new SearchIndexableResource(context); sir.xmlResId = R.xml.display_settings; result.add(sir); return result; }
getRawDataToIndex
- Zastąp tę wartość, jeśli fragment nie pochodzi z:
preference xml
- Zwraca listę nieprzetworzonych danych (
SearchIndexableRaw
) do zindeksowania.
Przykład nieprzetworzonych danych:
public List<SearchIndexableRaw> getRawDataToIndex(Context context, boolean enabled) { final List<SearchIndexableRaw> result = new ArrayList<>(); final Resources res = context.getResources(); // Add fragment title SearchIndexableRaw data = new SearchIndexableRaw(context); data.title = res.getString(R.string.wifi_settings); data.screenTitle = res.getString(R.string.wifi_settings); data.keywords = res.getString(R.string.keywords_wifi); data.key = DATA_KEY_REFERENCE; result.add(data); return result; }
getNonIndexableKeys
- Jeśli fragment jest oznaczony jako
DashboardFragment
, rzadko trzeba go zastąpić. - Zwraca listę kluczy odpowiadających wynikom, które nie powinny być wyświetlane dla danego użytkownika, urządzenia, konfiguracji itp.Klucze podane tutaj powinny pasować do pola KEY w elementach
SearchIndexableResource
iSearchIndexableRaw
. - Przykład: zużycie danych nie powinno się wyświetlać w przypadku użytkowników, którzy nigdy nie mieli karty SIM w urządzeniu.
Przykład kluczy, których nie można indeksować:
public List<String> getNonIndexableKeys(Context context) { final List<String> keys = super.getNonIndexableKeys(context); if (!checkIntentAction(context, "android.settings.TERMS")) { keys.add(KEY_TERMS); } if (!checkIntentAction(context, "android.settings.LICENSE")) { keys.add(KEY_LICENSE); } if (!checkIntentAction(context, "android.settings.COPYRIGHT")) { keys.add(KEY_COPYRIGHT); } if (!checkIntentAction(context, "android.settings.WEBVIEW_LICENSE")) { keys.add(KEY_WEBVIEW_LICENSE); } return keys; }
getPreferenceControllers
Zwraca listę kontrolerów preferencji powiązanych z tym fragmentem. Ta lista służy do tworzenia wyników wbudowanych, aktualizowania elementów nieindeksowalnych itp.
Dlatego wszystko, co chcesz wyświetlać w wyszukiwarce, musi być uwzględnione w elementach getXmlResourcesToIndex
lub getRawDataToIndex
.
Dodawanie słów kluczowych do ustawień
Aby ustawienie było łatwe do wyszukania, dodaj słowa kluczowe, które są odpowiednie dla tego ustawienia i które użytkownik może użyć do jego wyszukania.
Co wziąć pod uwagę podczas dodawania słów kluczowych:
- Słowa kluczowe to lista słów, których użytkownik nie musi widzieć, ale mogą one stanowić część jego modelu umysłowego dotyczącego działania ustawienia.
- Są to słowa, które użytkownik może wpisać, aby otworzyć ustawienie.
- Mogą to być synonimy lub dowolne słowa powiązane z danym ustawieniem.
- Na przykład „wycisz” może być używane do znalezienia ustawienia Głośność.
Unikaj powielania
Jeśli bezwarunkowo blokujesz wyświetlanie strony ustawień, usuń indeksowanie oryginalnej strony, aby uniknąć powielania wyników.
- Znajdź
PreferenceFragment
strony, którą chcesz wykluczyć. - Usuń
SearchIndexProvider
.
Weryfikacja
Aby sprawdzić, czy nowe ustawienie jest wyszukiwalne:
- Zainstaluj na urządzeniu najnowszą wersję O.
- Zmien indeks bazy danych, wybierając: Ustawienia > Aplikacje i powiadomienia > Informacje o aplikacji > Ustawienia > Miejsce na dane > Wyczyść dane
- Sprawdź, czy ustawienia docelowe są widoczne w wyszukiwarce.
Wyszukanie prefiksu tytułu ustawienia spowoduje dopasowanie.
Aby sprawdzić implementację tej funkcji, możesz uruchomić te testy robolectric:
packages/apps/Settings/tests/robotests/src/com/android/settings/search
Docelowy typ kompilacji to: RunSettingsRoboTests