Android 8.0 bietet erweiterte Suchfunktionen für das Menü Einstellungen. In diesem Dokument wird beschrieben, wie Sie eine Einstellung hinzufügen und dafür sorgen, dass sie für die Einstellungssuche richtig indexiert wird.
Indexierbare Einstellungen erstellen
Jedes zu indexierende Einstellungsfragment implementiert die Indexable
-Schnittstelle UND erfordert das statische Feld:
public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER
Nachdem Sie das Fragment für die Indexierung eingerichtet haben, fügen Sie es SearchIndexableResources
unter
packages/apps/Settings/src/com/android/settings/search/SearchIndexableResources.java
hinzu.
Optionale Methoden
Diese SearchIndexProvider
-Schnittstelle hat vier optionale Methoden.
getXmlResourcesToIndex
- Überschreiben Sie diese Einstellung, wenn die Fragmentinhalte aus folgenden Quellen stammen:
preference xml
- Gibt eine XML-Einstellung als Liste zurück, die indexiert werden soll.
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
- Überschreiben Sie diese Einstellung, wenn die Fragmentinhalte NICHT von folgenden Quellen stammen:
preference xml
- 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 nur selten überschreiben. - Hiermit wird eine Liste von Schlüsseln zurückgegeben, die Ergebnissen entsprechen, die für den angegebenen Nutzer, das angegebene Gerät, die angegebene Konfiguration usw. nicht angezeigt werden sollten. Die hier angegebenen Schlüssel müssen 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 indexierbare 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
Eine Liste der Einstellungscontroller, die mit diesem Fragment verknüpft sind. Diese Liste wird verwendet, um Inline-Ergebnisse zu erstellen, nicht indexierbare Elemente zu aktualisieren usw.
Daher muss alles, was in der Suche angezeigt werden soll, entweder in getXmlResourcesToIndex
oder getRawDataToIndex
enthalten sein.
Keywords für Ihre Einstellungen hinzufügen
Damit eine Einstellung leicht zu finden ist, fügen Sie Keywords hinzu, die für die Einstellung relevant sind und mit denen Nutzer nach der Einstellung suchen können.
Wichtige Aspekte beim Hinzufügen von Keywords:
- Keywords sind eine Liste von Wörtern, die der Nutzer nicht unbedingt sieht, die aber Teil seines mentalen Modells für die Funktionsweise der Einstellung sein können.
- Das sind Wörter, die der Nutzer eingeben könnte, um die Einstellung aufzurufen.
- Es können Synonyme oder beliebige mit der Einstellung verknüpfte Wörter verwendet werden.
- Sie können beispielsweise „stummschalten“ sagen, um die Lautstärkeeinstellung zu finden.
Duplikate vermeiden
Wenn Sie eine Einstellungsseite bedingungslos unterdrücken, entfernen Sie die Indexierung der Originalseite, um Duplikate von Ergebnissen zu vermeiden.
- Suchen Sie die
PreferenceFragment
der Seite, die Sie unterdrücken möchten. - Entfernen Sie
SearchIndexProvider
.
Zertifizierungsstufe
So testen Sie die Suchbarkeit einer neuen Einstellung:
- Installieren Sie eine aktuelle Version von O auf dem Gerät.
- Wählen Sie eine der folgenden Optionen aus, um die Datenbank neu zu indexieren: Einstellungen > Apps & Benachrichtigungen > App-Informationen > 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 eine Übereinstimmung 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