Wyszukiwanie uniwersalne

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 Indexableoraz 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 SearchIndexableResourceSearchIndexableRaw.
  • 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.

  1. Znajdź PreferenceFragment strony, którą chcesz wykluczyć.
  2. Usuń SearchIndexProvider.

Weryfikacja

Aby sprawdzić, czy nowe ustawienie jest wyszukiwalne:

  1. Zainstaluj na urządzeniu najnowszą wersję O.
  2. Zmien indeks bazy danych, wybierając:
  3. Ustawienia > Aplikacje i powiadomienia > Informacje o aplikacji > Ustawienia > Miejsce na dane > Wyczyść dane
  4. 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