Android应用程序中有多个SearchRecentSuggestionsProvider类可能?

我在我的应用程序中使用SearchManager实现了两个不同的search活动。 一个是默认search整个应用程序,另一个只用于一个活动。 这两个search将执行不同数据的查找,并且在两个不同的search中共享search历史logging是没有意义的。 两个不同的searchfunction在应用程序内function良好,我的问题是最近的search历史。

问题是在应用程序中定义了两个不同的SearchRecentSuggestionsProvider类,但在两个search的最近searchbuild议历史logging中都显示了一个search。 我已阅读开发指南中的SearchManager主题,但没有看到关于多个build议提供者的任何信息。

以下是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类看起来完全一样,只是将Onereplace为Two,并且位于它自己的SearchTwoRecentSuggestionsProvider.java文件中。)

以下是searchbuild议数据库中的内容(位于/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没有列,所以也许没有办法分开两个search的历史logging?

所有这一切的最终结果是,当您在两个不同的search中进行search时,您可以在最近的search历史build议中看到searchone和searchtwo。 如果可能,我希望每个人都有自己的历史。 希望我不会错过一些愚蠢的东西! 感谢您抽时间阅读。

Solutions Collecting From Web of "Android应用程序中有多个SearchRecentSuggestionsProvider类可能?"

我查看了SearchRecentSuggestionsProvider和SearchRecentSuggestions的源代码,显然这些类被devise为在所有应用程序中使用公共数据库,而不是关于是否使用多个提供程序(所以在同一个应用程序中使用多个SearchRecentSuggestionsProvider是无用的)。 我找不到使用两个不同数据库的方法。

但是我想到了一个技巧:在每个查询的开头添加一个字符(比如'1'用于activity1最近的search,'2'用于activity2最近的search),当用saveRecentQuery()保存时。 如果你在activity1中,你将会执行saveRecentQuery('1'+ query,…)。

然后重写SearchRecentSuggestionsProvider.query(),在这里你可以根据第一个字符'1'或'2'的值来过滤你想显示的行(当然,你也必须从string中删除它)。 如果你在activity1上,你只想保持以'1'开始的值,…。 这样你可以处理多个build议列表。

然而,这是一个骗局,我不是100%确定它会这样工作…

看起来这是不可能的。 对于那些正在search同样问题的用户,请参阅https://code.google.com/p/android/issues/detail?id=13501以获取Google未来的更新&#x3002;

我已经做了一个小的修改,使这成为可能的类 – 请参阅https://gist.github.com/pokebyte/a08a67282a4f19ebbf52

具体而言,该更改添加了一个新的索引列( authority ),将search限制到特定的权限。