Ho due diverse attività di ricerca implementate con SearchManager nella mia app. Uno è il ricercabile predefinito per l'intera app e l'altro è utilizzato per una sola attività. Queste due ricerche eseguono ricerche di dati diversi e non ha senso condividere la cronologia delle ricerche tra le due diverse ricerche. Le due diverse ricerche sono funzionanti bene all'interno dell'app, il mio problema è con le cronologie di ricerca recenti.Multiple SearchRecentSuggestionsLe classi di prestatore nell'app per Android sono possibili?
Il problema è che esistono due diverse classi SearchRecentSuggestionsProvider definite all'interno dell'app, ma qualsiasi ricerca effettuata in una viene visualizzata nella cronologia dei suggerimenti di ricerca di entrambe le ricerche. Ho letto l'argomento SearchManager nella Guida Dev, ma non vedo alcuna informazione su più provider di suggerimenti.
Qui ci sono i due fornitori nel AndroidManifest.xml, nel nodo:
<provider android:name=".SearchOneRecentSuggestionsProvider"
android:authorities="com.company.SearchOneRecentSuggestionsProvider"></provider>
<provider android:name=".SearchTwoRecentSuggestionsProvider"
android:authorities="com.company.SearchTwoRecentSuggestionsProvider"></provider>
Ecco la classe definita in SearchOneRecentSuggestionsProvider.java:
package com.company;
import android.content.SearchRecentSuggestionsProvider;
public class SearchOneRecentSuggestionsProvider extends SearchRecentSuggestionsProvider {
public final static String AUTHORITY = "com.company.SearchOneRecentSuggestionsProvider";
public final static int MODE = DATABASE_MODE_QUERIES;
public SearchOneRecentSuggestionsProvider() {
setupSuggestions(AUTHORITY, MODE);
}
}
(La classe SearchTwoRecentSuggestionsProvider sembra esattamente lo stesso tranne che per sostituire One with Two e si trova nel proprio file SearchTwoRecentSuggestionsProvider.java.)
Ecco cosa è all'interno del database suggerimenti per la ricerca (a /data/data/com.company/databases/suggestions.db):
# sqlite3 suggestions.db
SQLite version 3.5.9
Enter ".help" for instructions
sqlite> .tables
android_metadata suggestions
sqlite> .schema suggestions
CREATE TABLE suggestions (_id INTEGER PRIMARY KEY,display1 TEXT UNIQUE ON CONFLICT REPLACE,query TEXT,date LONG);
sqlite> select * from suggestions;
1|searchone|searchone|1296177852444
2|searchtwo|searchtwo|1296177878744
Non c'è colonna per il SearchRecentSuggestionsProvider, quindi forse non c'è modo di separare la storia per le due ricerche ?
Il risultato finale di tutto questo è che quando si effettua una ricerca in una delle due diverse ricerche, si vedono sia searchone che searchtwo nei suggerimenti della cronologia delle ricerche recenti. Mi piacerebbe che ognuno avesse la propria storia, se possibile. Spero di non aver perso qualcosa di sciocco! Grazie per aver dedicato del tempo a leggere questo.
Grazie per la risposta, ho anche esaminato il codice sorgente e ho visto che il nome db era hardcoded. Speravo solo che mi mancasse qualcosa di semplice. Discuterò la tua proposta di soluzione con i miei colleghi e vedrò se ciò funzionerà forse per noi. –
Qual è il nome db con hardcoded? –