Universelle Suche

Unter Android 8.0 wurden die Suchfunktionen im Menü Einstellungen erweitert. Dieses wird beschrieben, wie Sie eine Einstellung hinzufügen und dafür sorgen, dass sie ordnungsgemäß für Einstellungssuche.

Indexierbare Einstellungen erstellen

Jedes Einstellungsfragment, das indexiert werden muss, implementiert das Indexable-Schnittstelle und UND erfordert die statische ein:

public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER

Nachdem Sie Ihr Fragment für die Indexierung eingerichtet haben, fügen Sie es zu SearchIndexableResources gefunden unter:
packages/apps/Settings/src/com/android/settings/search/SearchIndexableResources.java

Optionale Methoden

Diese SearchIndexProviderBenutzeroberfläche hat vier optionale .

getXmlResourcesToIndex

  • Überschreiben Sie dies, wenn Ihr Fragmentinhalt aus folgender Quelle stammt: preference xml
  • Gibt eine XML-Einstellung als zu indexierende Liste zurück.

Beispiel für XML-Ressourcen:

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

  • Überschreibe dies, wenn dein Fragmentinhalt NICHT aus preference xml stammt.
  • Gibt eine Liste der zu indexierenden Rohdaten (SearchIndexableRaw) zurück.

Beispiel für Rohdaten:

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

  • Wenn Ihr Fragment ein DashboardFragment ist, müssen Sie nur selten überschreiben.
  • Gibt eine Liste von Schlüsseln zurück, die Ergebnissen entsprechen, die nicht angezeigt werden sollen für den jeweiligen Nutzer, das Gerät, die Konfiguration usw. entspricht dem Feld KEY in SearchIndexableResource und SearchIndexableRaw.
  • Beispiel: Die Datennutzung sollte nicht für Nutzer angezeigt werden, die bisher noch keine SIM-Karte im Gerät

Beispiel für nicht indizierbare Schlüssel:

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

Gibt eine Liste der Präferenz-Controller zurück, die mit diesem Fragment verknüpft sind. Diese Liste wird zum Erstellen von Inline-Ergebnissen, Aktualisieren nicht indizierbarer Daten usw. verwendet.

Daher muss alles, was in der Suche angezeigt werden soll, entweder in getXmlResourcesToIndex oder getRawDataToIndex.

Keywords für Einstellungen hinzufügen

Damit eine Einstellung leicht gefunden werden kann, fügen Sie Keywords hinzu, die für die Einstellung, über die Nutzer nach der Einstellung suchen können.

Beachten Sie beim Hinzufügen von Keywords Folgendes:

  • Keywords sind eine Liste von Wörtern, die der Nutzer nicht unbedingt sieht, ein Modell für die Funktionsweise des Schauplatzes zu sein.
  • Dabei handelt es sich um Wörter, die der Nutzer eingeben kann, um zu Ihrer Einstellung zu gelangen.
  • Dabei kann es sich um Synonyme oder um Wörter handeln, die mit der Einstellung verknüpft sind.
  • Beispiel: „Stummschalten“ kann verwendet werden, um die Lautstärkeeinstellung zu finden.

Duplikate vermeiden

Wenn Sie eine Einstellungsseite bedingungslos unterdrücken, entfernen Sie die Indexierung von Originalseite, um doppelte Ergebnisse zu vermeiden.

  1. Suchen Sie nach dem PreferenceFragment der Seite, die Sie unterdrücken möchten.
  2. Entfernen Sie SearchIndexProvider.

Zertifizierungsstufe

So testen Sie die Sichtbarkeit einer neuen Einstellung:

  1. Installieren Sie eine aktuelle Version von O auf dem Gerät.
  2. Indexieren Sie die Datenbank neu, indem Sie Folgendes auswählen:
  3. Einstellungen > Apps und Benachrichtigungen > App-Info > Einstellungen > Speicher > Daten löschen
  4. Prüfen Sie, ob die Zieleinstellungen in der Suche angezeigt werden.
    Wenn Sie nach einem Präfix des Titels einer Einstellung suchen, wird dieses gefunden.

Diese robolectric-Tests können ausgeführt werden, um die Implementierung Funktion:
packages/apps/Settings/tests/robotests/src/com/android/settings/search

Das Build-Ziel ist: RunSettingsRoboTests