Хорошо, я не уверен, что это самый простой способ выполнить то, что я просил, но вот как я это сделал:
- Создайте еще один ContentProvider и используйте его в моем searchable.xml
- Этот новый метод запроса ContentProvider запросит мой SearchRecentSuggestionsProvider со специальными параметрами и специальным URI и вернет этот курсор.
Фрагмент исходного кода моего нового ContentProvider:
...
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
final String[] PROJECTION = new String[] {
"_id",
"display1 AS " + SearchManager.SUGGEST_COLUMN_TEXT_1,
"display2 AS " + SearchManager.SUGGEST_COLUMN_TEXT_2,
"query AS " + SearchManager.SUGGEST_COLUMN_QUERY,
android.R.drawable.ic_menu_recent_history + " AS " + SearchManager.SUGGEST_COLUMN_ICON_1,
};
final Uri URI =
Uri.parse("content://" + SearchHistoryProvider.AUTHORITY + "/suggestions");
return getContext().getContentResolver().query(
URI,
PROJECTION,
"display1 LIKE ?",
new String[] {selectionArgs[0] + "%"},
"date DESC");
}
...
Если SearchRecentSuggestionsProvider не настроен на использование двух строк, 'display2' в вышеприведенной проекции должен быть изменен на 'null' или, возможно, вообще может быть опущен.
Если путь «предложения» пропущен в URI, он не будет работать. Это должны быть «предложения», в противном случае вы увидите исключение «Неверный Uri».
Я выкопал большую часть этой информации, перекопав исходный код в SearchRecentSuggestionsProvider.