我有一个自定义搜索建议提供程序。现在,这并不是真正提供建议本身,而是提供搜索快捷方式。这是我编写的自定义提供程序:
public class QuickSearchProvider extends SearchRecentSuggestionsProvider {
public final static String AUTHORITY = "com.example.testapp.providers.QuickSearchProvider";
public final static int MODE = DATABASE_MODE_QUERIES | DATABASE_MODE_2LINES;
public QuickSearchProvider() {
setupSuggestions(AUTHORITY, MODE);
}
public Cursor query(Uri uri, String[] projection, String sel,
String[] selArgs, String sortOrder) {
MatrixCursor cursor = new MatrixCursor(new String[] {
BaseColumns._ID,
SearchManager.SUGGEST_COLUMN_TEXT_1,
SearchManager.SUGGEST_COLUMN_TEXT_2,
SearchManager.SUGGEST_COLUMN_ICON_1,
SearchManager.SUGGEST_COLUMN_INTENT_ACTION});
cursor.addRow(new Object[] { 0, "Plants", "Search Plants", android.R.drawable.ic_menu_search, Search.SEARCH_PLANTS_ACTION});
cursor.addRow(new Object[] { 1, "Birds", "Search Birds", android.R.drawable.ic_menu_search, Search.SEARCH_BIRDS_ACTION });
return new MergeCursor(new Cursor[] { cursor });
}
}
在包含搜索字段的 Activity 中,我在 onNewIntent
方法中编写了一个处理程序。这是一个例子:
protected void onNewIntent(Intent intent) {
if (Search.SEARCH_PLANTS_ACTION.equals(intent.getAction())) {
...
} else if (Search.SEARCH_BIRDS_ACTION.equals(intent.getAction())) {
...
}
}
如您所见,我可以轻松检查选择了哪个搜索快捷方式,但我似乎无法弄清楚如何获取原始查询字符串。有帮助吗?
(附带说明:如果您发现我对自定义搜索建议提供程序的实现有误或可以改进,请告诉我。)
谢谢。
最佳答案
经过一些头脑 Storm 和艰难地阅读文档之后。我知道了!
搜索字符串始终作为 query()
方法的 selArgs
参数中的第一项也是唯一一项可用。
为了在 Activity 的 Intent 处理程序中获取搜索字符串,您需要使用:intent.getStringExtra(SearchManager.QUERY)
。默认情况下,此值仅在提交搜索时可用,而不是在单击搜索建议时可用。如果您需要使用您为搜索建议定义的自定义 Intent 获取此值,则需要像这样将其添加到光标:
public class QuickSearchProvider extends SearchRecentSuggestionsProvider {
public final static String AUTHORITY = "com.example.testapp.providers.QuickSearchProvider";
public final static int MODE = DATABASE_MODE_QUERIES | DATABASE_MODE_2LINES;
public QuickSearchProvider() {
setupSuggestions(AUTHORITY, MODE);
}
public Cursor query(Uri uri, String[] projection, String sel,
String[] selArgs, String sortOrder) {
MatrixCursor cursor = new MatrixCursor(new String[] {
BaseColumns._ID,
SearchManager.SUGGEST_COLUMN_TEXT_1,
SearchManager.SUGGEST_COLUMN_TEXT_2,
SearchManager.SUGGEST_COLUMN_ICON_1,
SearchManager.SUGGEST_COLUMN_QUERY,
SearchManager.SUGGEST_COLUMN_INTENT_ACTION});
cursor.addRow(new Object[] { 0, "Plants", "Search Plants", android.R.drawable.ic_menu_search, selArgs[0], Search.SEARCH_PLANTS_ACTION});
cursor.addRow(new Object[] { 1, "Birds", "Search Birds", android.R.drawable.ic_menu_search, selArgs[0], Search.SEARCH_BIRDS_ACTION });
return new MergeCursor(new Cursor[] { cursor });
}
}
关于java - 使用自定义搜索建议提供程序时获取搜索查询字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12176720/