Unter Android 8.0 wurden die Suchfunktionen im Menü Einstellungen erweitert. In diesem Dokument wird beschrieben, wie Sie eine Einstellung hinzufügen und dafür sorgen, dass sie ordnungsgemäß für die Suche in den Einstellungen indexiert wird.
Indexierbare Einstellungen erstellen
Jedes Einstellungsfragment, das indexiert werden muss, implementiert die Indexable
-Schnittstelle UND erfordert das statische Feld:
public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER
Nachdem Sie Ihr Fragment für die Indexierung eingerichtet haben, fügen Sie es SearchIndexableResources
hinzu. Sie finden es unter:
packages/apps/Settings/src/com/android/settings/search/SearchIndexableResources.java
Optionale Methoden
Diese SearchIndexProvider
-Schnittstelle hat vier optionale Methoden.
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 dies selten überschreiben. - Gibt eine Liste von Schlüsseln zurück, die Ergebnissen entsprechen, die für den angegebenen Nutzer, das Gerät, die Konfiguration usw. nicht angezeigt werden sollen. Die hier angegebenen Schlüssel sollten mit dem Feld KEY in
SearchIndexableResource
undSearchIndexableRaw
übereinstimmen. - Beispiel: Die Datennutzung sollte nicht für Nutzer angezeigt werden, die noch nie eine SIM-Karte in ihrem Gerät hatten.
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, in getXmlResourcesToIndex
oder getRawDataToIndex
enthalten sein.
Keywords für Einstellungen hinzufügen
Damit eine Einstellung leicht zu finden ist, sollten Sie Suchbegriffe hinzufügen, die für die Einstellung relevant sind, mit der 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, aber möglicherweise Teil des mentalen Modells für die Funktionsweise der Einstellung ist.
- 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.
- Beispielsweise kann „Stummschalten“ verwendet werden, um die Einstellung für die Lautstärke zu finden.
Duplikate vermeiden
Wenn Sie eine Einstellungsseite bedingungslos unterdrücken, entfernen Sie die Indexierung der Originalseite, um doppelte Ergebnisse zu vermeiden.
- Suchen Sie nach dem
PreferenceFragment
der Seite, die Sie unterdrücken möchten. - Entfernen Sie
SearchIndexProvider
.
Zertifizierungsstufe
So testen Sie die Sichtbarkeit einer neuen Einstellung:
- Installieren Sie eine aktuelle Version von O auf dem Gerät.
- Indexieren Sie die Datenbank neu, indem Sie Folgendes auswählen: Einstellungen > Apps & Benachrichtigungen > App-Info > Einstellungen > Speicher > Daten löschen
- 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 dieser Funktion zu validieren:
packages/apps/Settings/tests/robotests/src/com/android/settings/search
Das Build-Ziel ist: RunSettingsRoboTests