Android 8.0 dodaje rozszerzone możliwości wyszukiwania w menu Ustawienia . W tym dokumencie opisano, jak dodać ustawienie i upewnić się, że jest ono prawidłowo zaindeksowane podczas wyszukiwania ustawień.
Tworzenie ustawień indeksowanych
Każdy fragment ustawień, który wymaga indeksowania, implementuje interfejs Indexable
ORAZ wymaga pola statycznego:
public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER
Po skonfigurowaniu fragmentu do indeksowania dodaj go do SearchIndexableResources
znajdującego się pod adresem:
packages/apps/Settings/src/com/android/settings/search/SearchIndexableResources.java
Metody opcjonalne
Ten interfejs SearchIndexProvider
ma cztery opcjonalne metody.
getXmlResourcesToIndex
- Zastąp tę opcję, jeśli zawartość 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; }
pobierzRawDataToIndex
- Zastąp tę opcję, jeśli zawartość fragmentu NIE pochodzi z:
preference xml
- Zwraca listę nieprzetworzonych danych (
SearchIndexableRaw
) do zaindeksowania.
Przykład surowych 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; }
pobierz klucze nieindeksowalne
- Jeśli Twój fragment to
DashboardFragment
, rzadko trzeba to zastępować. - Zwraca listę kluczy odpowiadających wynikom, które nie powinny pojawić się dla danego użytkownika, urządzenia, konfiguracji itp. Podane tutaj klucze powinny pasować do pola KEY w
SearchIndexableResource
iSearchIndexableRaw
. - Na przykład: Użycie danych nie powinno być wyświetlane użytkownikom, którzy nigdy nie mieli karty SIM w swoim urządzeniu.
Przykład kluczy nieindeksowalnych:
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, aktualizacji nieindeksowalnych itp.
Dlatego wszystko, co chcesz wyświetlić w wyszukiwaniu, musi zostać uwzględnione w getXmlResourcesToIndex
lub getRawDataToIndex
.
Dodawanie słów kluczowych do ustawień
Aby mieć pewność, że ustawienie będzie łatwe do przeszukiwania, dodaj słowa kluczowe powiązane z ustawieniem, których użytkownik będzie mógł użyć do wyszukania tego ustawienia.
Rzeczy, które należy wziąć pod uwagę podczas dodawania słów kluczowych:
- Słowa kluczowe to lista słów, które użytkownik niekoniecznie widzi, ale mogą stanowić część jego mentalnego modelu działania ustawienia.
- Są to słowa, które użytkownik może wpisać, aby przejść do ustawień.
- Mogą to być synonimy lub można użyć dowolnych słów związanych z ustawieniem.
- Na przykład „wyciszenie” może zostać użyte do znalezienia ustawienia głośności.
Unikanie powielania
Jeśli bezwarunkowo pomijasz stronę ustawień, usuń indeksowanie oryginalnej strony, aby uniknąć powielania wyników.
- Znajdź
PreferenceFragment
strony, którą pomijasz. - Usuń
SearchIndexProvider
.
Walidacja
Aby przetestować możliwość wyszukiwania nowego ustawienia:
- Zainstaluj najnowszą wersję O na urządzeniu.
- Zindeksuj ponownie bazę danych wybierając: Ustawienia > Aplikacje i powiadomienia > Informacje o aplikacjach > Ustawienia > Pamięć > Wyczyść dane
- Sprawdź, czy ustawienia celu pojawiają się w wyszukiwaniu.
Wyszukiwanie przedrostka tytułu ustawienia spowoduje jego dopasowanie.
W celu sprawdzenia wdrożenia tej funkcji można przeprowadzić następujące testy robotyczne:
packages/apps/Settings/tests/robotests/src/com/android/settings/search
Celem kompilacji jest: RunSettingsRoboTests