Mehrere SearchRecentSuggestionsProvider-Klassen in der Android-App möglich?

9

Ich habe zwei verschiedene Suchaktivitäten mit SearchManager in meiner App implementiert. Einer ist der Standard, der für die gesamte App durchsucht werden kann, der andere wird nur für eine Aktivität verwendet. Diese beiden Suchen führen Suchen nach verschiedenen Daten durch, und es macht keinen Sinn, den Suchverlauf über die zwei verschiedenen Suchen hinweg zu teilen. Die zwei verschiedenen Suchfunktionen funktionieren funktionell innerhalb der App, mein Problem ist die aktuelle Suchhistorie.

Das Problem ist, dass es zwei verschiedene SearchRecentSuggestionsProvider -Klassen gibt, die in der App definiert sind, aber keine Suche in einem wird in den letzten Suchvorschlägen der beiden Suchanfragen angezeigt. Ich habe das Thema "SearchManager" im Entwicklerhandbuch gelesen, sehe aber keine Informationen über mehrere Anbieter von Vorschlägen.

Hier sind die zwei Anbieter in der AndroidManifest.xml, im Knoten:

%Vor%

Hier ist die in SearchOneRecentSuggestionsProvider.java definierte Klasse:

%Vor%

(Die SearchTwoRecentSuggestionsProvider-Klasse sieht genau gleich aus, außer dem Ersetzen von Eins durch Zwei und befindet sich in ihrer eigenen SearchTwoRecentSuggestionsProvider.java-Datei.)

Hier sehen Sie, was sich in der Suchvorschlagsdatenbank (unter /data/data/com.company/databases/suggestions.db) befindet:

%Vor%

Es gibt keine Spalte für den SearchRecentSuggestionsProvider. Vielleicht gibt es keine Möglichkeit, den Verlauf für die beiden Suchen zu trennen?

Das Endergebnis all dessen ist, dass wenn Sie eine Suche in einer der zwei verschiedenen Suchen durchführen, Sie in den letzten Suchverlaufsvorschlägen sowohl searchone als auch searchtwo sehen. Ich möchte, dass jeder seine eigene Geschichte hat, wenn möglich. Hoffentlich habe ich nicht nur etwas Dummes vermisst! Danke, dass Sie sich die Zeit genommen haben, dies zu lesen.

    
Marc Bernstein 28.01.2011, 17:19
quelle

3 Antworten

1

Sieht aus, als ob es zu diesem Zeitpunkt nicht möglich ist. Nutzer von Google, die nach dem gleichen Problem suchen, finden Sie unter Ссылка für zukünftige Updates von Google .

    
Marc Bernstein 01.02.2011, 22:57
quelle
2

Ich habe mir die SearchRecentSuggestionsProvider und SearchRecentSuggestions Quellcode, und klar diese Klassen wurden entwickelt, um eine gemeinsame Datenbank unter allen Anwendungen zu verwenden, nicht in Bezug darauf, ob Sie mehrere Anbieter verwenden oder nicht (die Verwendung mehrerer SearchRecentSuggestionsProvider in der gleichen App ist nutzlos). Ich kann keine Möglichkeit finden, zwei verschiedene Datenbanken zu verwenden.

Aber ich habe über einen Trick nachgedacht: füge ein Zeichen (wie '1' für die letzten Suchen von activity1 und '2' für die letzten Suchen von activity2) am Anfang jeder Abfrage hinzu, wenn sie mit saveRecentQuery () gespeichert werden. Wenn Sie sich in Aktivität1 befinden, führen Sie saveRecentQuery ('1' + Abfrage, ...) aus.

Überschreibe dann SearchRecentSuggestionsProvider.query (), hier kannst du die Zeilen filtern, die angezeigt werden sollen, abhängig vom Wert des ersten Zeichens, '1' oder '2' (du musst es natürlich auch aus der Zeichenkette entfernen) . Wenn Sie auf Aktivität1 sind, möchten Sie nur Werte behalten, die mit "1" beginnen, .... Auf diese Weise können Sie mehrere Vorschlagslisten bearbeiten.

Aber es ist ein Trick und ich bin mir nicht 100% sicher, dass es so funktionieren wird ...

    
Dalmas 01.02.2011 02:28
quelle
0

Ich habe eine kleine Änderung an der Klasse vorgenommen, die dies ermöglicht - siehe Ссылка

Insbesondere fügt die Änderung eine neue indizierte Spalte ( authority ) hinzu, die die Suche auf eine bestimmte Autorität beschränkt.

    
Melllvar 23.01.2015 01:51
quelle