Wyszukiwanie uniwersalne

W Androidzie 8.0 wprowadzono rozszerzone funkcje wyszukiwania w menu Ustawienia. Ten opisuje, jak dodać ustawienie i upewnić się, że jest ono poprawnie zindeksowane w przypadku Wyszukiwanie ustawień.

Utwórz ustawienia dostępne do indeksowania

Każdy fragment ustawień, który musi zostać zindeksowany, implementuje tag Indexableinterfejs ORAZ wymaga statycznego parametru pole:

public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER

Po skonfigurowaniu fragmentu pod kątem indeksowania dodaj go do Znaleziono SearchIndexableResources pod adresem:
packages/apps/Settings/src/com/android/settings/search/SearchIndexableResources.java

Metody opcjonalne

Ten SearchIndexProviderinterfejs ma cztery opcjonalne .

getXmlResourcesToIndex.

  • Zastąp to ustawienie, jeśli treść fragmentu pochodzi z: preference xml
  • Zwraca preferencję XML w postaci listy do indeksowania.

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 to, jeśli treść fragmentu NIE pochodzi od: 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 to DashboardFragment, rzadko trzeba zastąpić to ustawienie.
  • Zwraca listę kluczy odpowiadającą wynikom, które nie powinny się wyświetlać dla danego użytkownika, urządzenia, konfiguracji itd.Podane tu klucze powinny pasują do pola KEY w SearchIndexableResource i SearchIndexableRaw
  • Na przykład: pole Użycie danych nie powinno być wyświetlane użytkownikom, którzy nigdy kartę SIM w urządzeniu;

Przykład kluczy niemożliwych do zindeksowania:

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;
}

kontrolery getPreferenceControllers,

Zwraca listę kontrolerów preferencji powiązanych z tym fragmentem. Ta lista służy do tworzenia wyników w tekście, aktualizowania elementów, których nie można zindeksować itp.

Wszystko, co chcesz, aby wyświetlały się w wynikach wyszukiwania, musi znajdować się w jednym z getXmlResourcesToIndex lub getRawDataToIndex.

Dodaj słowa kluczowe do ustawień

Aby ułatwić wyszukiwanie ustawienia, dodaj słowa kluczowe odpowiednie dla za pomocą którego użytkownik może wyszukać dane ustawienie.

Co warto wziąć pod uwagę podczas dodawania słów kluczowych:

  • Słowa kluczowe to lista słów, które użytkownik niekoniecznie widzi, ale może mogą też być wzorem do naśladowania w tym kontekście.
  • To są słowa, które użytkownik może wpisać, aby przejść do Twojego ustawienia.
  • Mogą to być synonimy lub dowolne słowa powiązane z ustawieniem.
  • Na przykład „wycisz” może posłużyć do znalezienia ustawienia głośności.

Unikaj powielania treści

Jeśli bezwarunkowo ukrywasz stronę ustawień, usuń indeksowanie w celu uniknięcia powielania wyników.

  1. Znajdź element PreferenceFragment strony, którą ukrywasz.
  2. Usuń SearchIndexProvider.

Weryfikacja

Aby sprawdzić możliwość wyszukiwania nowego ustawienia:

  1. Zainstaluj najnowszą wersję O na urządzeniu.
  2. Ponownie zindeksuj bazę danych, wybierając:
  3. Ustawienia > Aplikacje Powiadomienia > Informacje o aplikacjach > Ustawienia > Miejsce na dane > Wyczyść dane
  4. Sprawdź, czy ustawienia kierowania pojawiają się w wynikach wyszukiwania.
    Wyszukanie prefiksu tytułu ustawienia spowoduje jego dopasowanie.

Można przeprowadzić takie testy automatyczne, aby sprawdzić poprawność wdrożenia cecha:
packages/apps/Settings/tests/robotests/src/com/android/settings/search

Cel kompilacji to: RunSettingsRoboTests