Tengo dos actividades de búsqueda diferentes implementadas con SearchManager en mi aplicación. Uno es el que se puede buscar por defecto para toda la aplicación y el otro se usa para una sola actividad. Estas dos búsquedas realizan búsquedas de datos diferentes, y no tiene sentido compartir el historial de búsqueda en las dos búsquedas diferentes. Las dos búsquedas diferentes funcionan bien desde el punto de vista funcional en la aplicación, mi problema es con los historiales de búsqueda recientes.Múltiples clases SearchRecentSuggestionsProvider en la aplicación de Android posible?
El problema es que hay dos clases SearchRecentSuggestionsProvider diferentes definidas en la aplicación, pero cualquier búsqueda realizada en una se muestra en el historial de búsquedas recientes de ambas búsquedas. He leído el tema del Administrador de búsqueda en la Guía de desarrollo pero no veo información sobre múltiples proveedores de sugerencias.
Éstos son los dos proveedores en el AndroidManifest.xml, en el nodo:
<provider android:name=".SearchOneRecentSuggestionsProvider"
android:authorities="com.company.SearchOneRecentSuggestionsProvider"></provider>
<provider android:name=".SearchTwoRecentSuggestionsProvider"
android:authorities="com.company.SearchTwoRecentSuggestionsProvider"></provider>
Aquí está la clase definida en 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 clase SearchTwoRecentSuggestionsProvider se ve exactamente igual excepto para reemplazar One with Two y está en su propio archivo SearchTwoRecentSuggestionsProvider.java).
Esto es lo que es dentro de la base de datos de sugerencias de búsqueda (en /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
No hay ninguna columna para el SearchRecentSuggestionsProvider, por lo que quizá no hay manera de separar la historia de las dos búsquedas ?
El resultado final de todo esto es que cuando realiza una búsqueda en cualquiera de las dos búsquedas diferentes, verá tanto searchone como searchtwo en las sugerencias recientes del historial de búsqueda. Me gustaría que cada uno tenga su propia historia si es posible. ¡Espero no haberme perdido algo tonto! Gracias por tomarse el tiempo para leer esto.
Gracias por su respuesta, también había examinado el código fuente y vi que el nombre db estaba codificado. Solo esperaba haberme perdido algo simple. Discutiré su sugerencia de solución alternativa con mis colegas y veremos si eso puede funcionar para nosotros. –
¿Cuál es el nombre de db codificado? –