Google 致力于为黑人社区推动种族平等。查看具体举措
Questa pagina è stata tradotta dall'API Cloud Translation.
Switch to English

Ricerca universale

Android 8.0 aggiunge funzionalità di ricerca estese per il menu Impostazioni . Questo documento descrive come aggiungere un'impostazione e assicurarsi che sia correttamente indicizzata per la ricerca nelle impostazioni.

Creazione di impostazioni indicizzabili

Ogni frammento impostazioni che deve essere indicizzato implementa l' Indexable interfaccia, e richiede il campo statico:

public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER

Una volta impostato il frammento per l'indicizzazione, aggiungilo a SearchIndexableResources trovato su:
packages/apps/Settings/src/com/android/settings/search/SearchIndexableResources.java

Metodi opzionali

Questa interfaccia SearchIndexProvider ha quattro metodi opzionali.

getXmlResourcesToIndex

  • Sostituisci questo se il contenuto del frammento proviene da: preference xml
  • Restituisce una preferenza XML come elenco da indicizzare.

Esempio di risorse 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

  • Sostituisci questo se il contenuto del frammento NON proviene da: preference xml
  • Restituisce un elenco di dati grezzi ( SearchIndexableRaw ) da indicizzare.

Esempio di dati grezzi:

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

  • Se il tuo frammento è un DashboardFragment , raramente devi sovrascriverlo.
  • Restituisce un elenco di chiavi che corrisponde ai risultati che non dovrebbero essere visualizzati per l'utente, il dispositivo, la configurazione e così via. Le chiavi fornite qui devono corrispondere al campo KEY in SearchIndexableResource e SearchIndexableRaw .
  • Ad esempio: l'utilizzo dei dati non dovrebbe essere visualizzato per gli utenti che non hanno mai avuto una scheda SIM nel proprio dispositivo.

Esempio di chiavi non indicizzabili:

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

Restituisce un elenco di controller delle preferenze associati a questo frammento. Questo elenco viene utilizzato per formare risultati in linea, aggiornare non indicizzabili, ecc.

Pertanto, tutto ciò che desideri visualizzare nella ricerca deve essere incluso in getXmlResourcesToIndex o getRawDataToIndex .

Aggiunta di parole chiave per le tue impostazioni

Per assicurarti che un'impostazione sia facilmente ricercabile, aggiungi parole chiave pertinenti per l'impostazione che un utente può utilizzare per cercare l'impostazione.

Aspetti da considerare quando si aggiungono parole chiave:

  • Le parole chiave sono un elenco di parole che l'utente non vede necessariamente ma che possono far parte del loro modello mentale per il funzionamento dell'impostazione.
  • Queste sono parole che l'utente potrebbe digitare per accedere alla tua impostazione.
  • Possono essere sinonimi oppure è possibile utilizzare qualsiasi parola associata all'impostazione.
  • Ad esempio, "mute" potrebbe essere utilizzato per trovare l'impostazione del volume.

Evitare duplicazioni

Se stai sopprimendo incondizionatamente una pagina delle impostazioni, rimuovi l'indicizzazione della pagina originale per evitare la duplicazione dei risultati.

  1. Trova il PreferenceFragment della pagina che stai sopprimendo.
  2. Rimuovere il SearchIndexProvider .

Validazione

Per testare la ricercabilità di una nuova impostazione:

  1. Installa una versione recente di O sul dispositivo.
  2. Reindicizza il database selezionando:
  3. Impostazioni> App e notifiche> Info app> Impostazioni> Memoria> Cancella dati
  4. Verificare che le impostazioni di destinazione vengano visualizzate nella ricerca.
    La ricerca di un prefisso del titolo di un'impostazione lo corrisponderà.

Questi test robolectric possono essere eseguiti per convalidare l'implementazione di questa funzione:
packages/apps/Settings/tests/robotests/src/com/android/settings/search

L'obiettivo di compilazione è: RunSettingsRoboTests