我在我的應用程序中使用SearchManager執行了兩項不同的搜索活動。一個是整個應用的默認搜索,另一個僅用於一個活動。這兩個搜索會執行不同數據的查找,並且在兩個不同的搜索中共享搜索歷史記錄是沒有意義的。這兩種不同的搜索功能在應用程序內功能良好,我的問題是最近的搜索歷史。可以在Android應用程序中使用多個SearchRecentSuggestionsProvider類?
問題是應用程序中定義了兩個不同的SearchRecentSuggestionsProvider類,但是在兩個搜索的最近搜索建議歷史記錄中都顯示了一個搜索。我已閱讀開發指南中的SearchManager主題,但沒有看到有關多個建議提供者的任何信息。
這裏是在AndroidManifest.xml的兩家供應商,在節點:
<provider android:name=".SearchOneRecentSuggestionsProvider"
android:authorities="com.company.SearchOneRecentSuggestionsProvider"></provider>
<provider android:name=".SearchTwoRecentSuggestionsProvider"
android:authorities="com.company.SearchTwoRecentSuggestionsProvider"></provider>
下面是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);
}
}
(該SearchTwoRecentSuggestionsProvider類長得一模一樣除了用One替換One並且在它自己的SearchTwoRecentSuggestionsProvider.java文件中。)
這是什麼搜索建議數據庫(在/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
有對SearchRecentSuggestionsProvider沒有列,所以也許沒有辦法分開了歷史的兩個搜索?
所有這一切的最終結果是,當您在兩個不同搜索中的任何一個搜索中進行搜索時,您會在最近的搜索歷史建議中看到searchone和searchtwo。如果可能,我希望每個人都有自己的歷史。希望我不會錯過一些愚蠢的東西!感謝您抽時間閱讀。
感謝您的回答,我也查看了源代碼,並看到db名稱是硬編碼的。我只是希望我錯過簡單的東西。我會與同事討論您的解決方法建議,看看這可能對我們有用。 – 2011-02-01 16:09:27