Wyszukiwanie uniwersalne

W Androidzie 8.0 wprowadzono rozszerzone funkcje wyszukiwania w menu Ustawienia. Z tego dokumentu dowiesz się, jak dodać ustawienie i upewnić się, że jest ono poprawnie zindeksowane na potrzeby wyszukiwania ustawień.

Utwórz ustawienia dostępne do indeksowania

Każdy fragment ustawień, który ma zostać zindeksowany, implementuje interfejs IndexableORAZ wymaga pola statycznego:

public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER

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

Metody opcjonalne

Ten interfejs SearchIndexProvider ma 4 opcjonalne metody.

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 go zastępować.
  • Zwraca listę kluczy odpowiadających wynikom, które nie powinny się wyświetlać w przypadku danego użytkownika, urządzenia, konfiguracji itp.Podane tutaj klucze powinny być zgodne z polem KEY w atrybutach SearchIndexableResource i SearchIndexableRaw.
  • Na przykład: pole Użycie danych nie powinno być wyświetlane użytkownikom, którzy nigdy nie mieli w urządzeniu karty SIM.

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.

Dlatego wszystko, co chcesz, aby pojawiały się w wynikach wyszukiwania, musisz uwzględnić w elemencie getXmlResourcesToIndex lub getRawDataToIndex.

Dodaj słowa kluczowe do ustawień

Aby ułatwić wyszukiwanie ustawienia, dodaj słowa kluczowe powiązane z ustawieniem, którego użytkownik może użyć do wyszukiwania.

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

  • Słowa kluczowe to lista słów, które użytkownik niekoniecznie musi zobaczyć, ale mogą one stanowić część jego modelu psychicznego związanego z działaniem danego ustawienia.
  • 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 słowo „wycisz” może być użyte do znalezienia ustawienia głośności.

Unikaj powielania treści

Jeśli bezwarunkowo pomijasz stronę ustawień, usuń indeksowanie strony oryginalnej, aby uniknąć duplikowania 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 i powiadomienia > Informacje o aplikacjach > Ustawienia > Pamięć > Wyczyść dane
  4. Sprawdź, czy ustawienia kierowania pojawiają się w wynikach wyszukiwania.
    Wyszukanie prefiksu tytułu ustawienia spowoduje jego dopasowanie.

Aby sprawdzić, czy ta funkcja działa prawidłowo, można przeprowadzić takie testy roboboelektryczne:
packages/apps/Settings/tests/robotests/src/com/android/settings/search

Cel kompilacji to: RunSettingsRoboTests