Используя диалоговое окно поиска или поисковый виджет Android, вы можете предоставлять пользовательские поисковые подсказки, созданные на основе данных вашего приложения. Например, если ваше приложение представляет собой словарь, вы можете предлагать слова из словаря, соответствующие тексту, введённому в поле поиска, ещё до того, как пользователь закончит вводить запрос. Эти подсказки ценны, поскольку они позволяют эффективно предсказать, что нужно пользователю, и обеспечить мгновенный доступ к нужному результату. На рисунке 1 показан пример диалогового окна поиска с пользовательскими подсказками.
После предоставления индивидуальных предложений вы также можете сделать их доступными для общесистемного поля быстрого поиска, что обеспечит доступ к вашему контенту извне вашего приложения.
Прежде чем добавлять пользовательские предложения, реализуйте диалог поиска Android или виджет поиска в своём приложении. См. разделы Создание интерфейса поиска и Поставщики контента .
Основы

Рисунок 1. Скриншот диалогового окна поиска с пользовательскими поисковыми предложениями.
Когда пользователь выбирает персонализированную подсказку, система отправляет Intent
в вашу поисковую активность. В отличие от обычного поискового запроса, который отправляет намерение с действием ACTION_SEARCH
, вы можете настроить персонализированные подсказки для использования ACTION_VIEW
(или любого другого действия с намерением), а также включить данные, релевантные выбранной подсказке. В примере со словарём, когда пользователь выбирает подсказку, приложение может сразу открыть определение этого слова, вместо того чтобы искать совпадения в словаре.
Чтобы предоставить индивидуальные предложения, выполните следующие действия:
- Реализуйте базовую функцию поиска, как описано в разделе Создание интерфейса поиска .
- Измените конфигурацию поиска, указав информацию о поставщике контента, который предоставляет пользовательские предложения.
- Создайте таблицу, например, в
SQLiteDatabase
, для ваших предложений и отформатируйте таблицу с необходимыми столбцами. - Создайте поставщика контента , имеющего доступ к вашей таблице предложений, и укажите поставщика в вашем манифесте.
- Объявите тип
Intent
, которое будет отправлено, когда пользователь выбирает предложение, включая настраиваемое действие и настраиваемые данные.
Система Android отображает не только диалоговое окно поиска, но и ваши поисковые подсказки. Вам нужен поставщик контента, от которого система сможет получать ваши подсказки. Чтобы узнать, как создать поставщика контента , ознакомьтесь со статьей «Поставщики контента».
Когда система определяет, что ваша активность доступна для поиска, и выдает поисковые предложения, при вводе пользователем запроса выполняется следующая процедура:
- Система берет текст поискового запроса (то есть все, что было введено на данный момент) и отправляет запрос вашему поставщику контента, который управляет вашими предложениями.
- Ваш поставщик контента возвращает
Cursor
, который указывает на все предложения, релевантные тексту поискового запроса. - Система отображает список предложений, предоставленных
Cursor
.
После отображения пользовательских предложений может произойти следующее:
- Если пользователь вводит другую букву или каким-либо образом изменяет запрос, предыдущие шаги повторяются, и список предложений обновляется соответствующим образом.
- Если пользователь выполняет поиск, предложения игнорируются, а поиск передается в вашу поисковую активность с использованием обычного намерения
ACTION_SEARCH
. - Если пользователь выбирает предложение, в вашу поисковую активность отправляется намерение, содержащее настраиваемое действие и настраиваемые данные, чтобы ваше приложение могло открыть предложенный контент.
Изменить конфигурацию поиска
Чтобы добавить поддержку пользовательских предложений, добавьте атрибут android:searchSuggestAuthority
к элементу <searchable>
в файле конфигурации поиска, как показано в следующем примере:
<?xml version="1.0" encoding="utf-8"?> <searchable xmlns:android="http://schemas.android.com/apk/res/android" android:label="@string/app_label" android:hint="@string/search_hint" android:searchSuggestAuthority="com.example.MyCustomSuggestionProvider"> </searchable>
Вам могут понадобиться дополнительные атрибуты в зависимости от типа намерения, которое вы приписываете каждому предложению, и того, как вы хотите форматировать запросы к поставщику контента. Другие необязательные атрибуты обсуждаются в следующих разделах.
Создать поставщика контента
Чтобы создать поставщика контента для пользовательских предложений, сначала ознакомьтесь со статьей «Поставщики контента» , чтобы узнать, как создать поставщика контента. Поставщик контента для пользовательских предложений похож на любой другой поставщик контента. Однако для каждого предлагаемого вами предложения соответствующая строка в Cursor
должна включать определённые столбцы, которые система распознаёт и использует для форматирования предложений.
Когда пользователь вводит текст в диалоговое окно поиска или виджет поиска, система запрашивает у вашего поставщика контента предложения, вызывая функцию query()
каждый раз при вводе буквы. В вашей реализации query()
поставщик контента должен выполнить поиск по данным предложений и вернуть Cursor
, указывающий на строки, которые он считает подходящими предложениями.
Подробная информация о создании поставщика контента для пользовательских предложений обсуждается в следующих двух разделах:
- Обработать запрос предложения
- Как система отправляет запросы вашему контент-провайдеру и как их обрабатывать.
- Создайте таблицу предложений
- Как определить столбцы, которые система ожидает в
Cursor
, возвращаемом при каждом запросе.
Обработать запрос предложения
Когда система запрашивает предложения у вашего поставщика контента, она вызывает его метод query()
. Реализуйте этот метод для поиска данных по предложениям и возврата Cursor
, указывающего на релевантные вам предложения.
Ниже приведен список параметров, которые система передает вашему методу query()
, перечисленных по порядку:
uri
Всегда
Uri
контента, отформатированный следующим образом:content://your.authority/optional.suggest.path/
SUGGEST_URI_PATH_QUERY
По умолчанию система передает этот URI и добавляет к нему текст запроса:
content://your.authority/optional.suggest.path/
SUGGEST_URI_PATH_QUERY
/puppiesТекст запроса в конце кодируется с использованием правил кодирования URI, поэтому перед выполнением поиска вам может потребоваться его декодировать.
optional.suggest.path
часть .suggest.path включается в URI только в том случае, если вы задаёте такой путь в файле конфигурации поиска с помощью атрибутаandroid:searchSuggestPath
. Она необходима только в том случае, если вы используете одного и того же поставщика контента для нескольких действий, доступных для поиска. В этом случае устраните неоднозначность источника запроса с подсказкой.projection
- Всегда ноль.
selection
- Значение, указанное в атрибуте
android:searchSuggestSelection
вашего файла конфигурации поиска, или null, если атрибутandroid:searchSuggestSelection
не объявлен. Подробнее об этом говорится в следующем разделе.selectionArgs
- Содержит поисковый запрос как первый и единственный элемент массива, если атрибут
android:searchSuggestSelection
объявлен в конфигурации поиска. Если атрибутandroid:searchSuggestSelection
не объявлен, этот параметр равен null. Подробнее об этом говорится в следующем разделе.sortOrder
- Всегда ноль.
Система может отправить вам текст поискового запроса двумя способами. По умолчанию текст запроса включается в качестве последнего пути URI контента, переданного в параметре uri
. Однако, если вы включите значение выбора в атрибут android:searchSuggestSelection
конфигурации поиска, то текст запроса будет передан как первый элемент строкового массива selectionArgs
. Эти два варианта описаны далее.
Получить запрос в Uri
По умолчанию запрос добавляется в качестве последнего сегмента параметра uri
— объекта Uri
. Чтобы получить текст запроса в этом случае, используйте getLastPathSegment()
, как показано в следующем примере:
Котлин
val query: String = uri.lastPathSegment.toLowerCase()
Ява
String query = uri.getLastPathSegment().toLowerCase();
Возвращает последний сегмент Uri
, представляющий собой текст запроса, введенный пользователем.
Получить запрос в аргументах выбора
Вместо использования URI может быть разумнее, чтобы ваш метод query()
получал всё необходимое для выполнения поиска, а параметры selection
и selectionArgs
могли бы содержать соответствующие значения. В этом случае добавьте атрибут android:searchSuggestSelection
в конфигурацию поиска со строкой выбора SQLite. В строке выбора включите вопросительный знак ( ? ) в качестве заполнителя для самого поискового запроса. Система вызовет query()
со строкой выбора в качестве параметра selection
и поисковым запросом в качестве первого элемента массива selectionArgs
.
Например, вот как можно сформировать атрибут android:searchSuggestSelection
для создания полнотекстового поискового запроса:
<?xml version="1.0" encoding="utf-8"?> <searchable xmlns:android="http://schemas.android.com/apk/res/android" android:label="@string/app_label" android:hint="@string/search_hint" android:searchSuggestAuthority="com.example.MyCustomSuggestionProvider" android:searchSuggestIntentAction="android.intent.action.VIEW" android:searchSuggestSelection="word MATCH ?"> </searchable>
При такой конфигурации ваш метод query()
передаёт параметр selection
как "word MATCH ?"
, а параметр selectionArgs
— как поисковый запрос. При передаче этих параметров в метод query()
SQLite в качестве соответствующих аргументов они синтезируются, то есть вопросительный знак заменяется текстом запроса. Если вы получаете запросы с подстановками таким образом и вам нужно добавить подстановочные знаки в текст запроса, добавьте их к параметру selectionArgs
или перед ним, поскольку это значение заключается в кавычки и вставляется вместо вопросительного знака.
Другой атрибут в предыдущем примере — android:searchSuggestIntentAction
, который определяет действие намерения, отправляемое с каждым намерением, когда пользователь выбирает предложение. Подробнее об этом говорится в разделе «Объявление намерения для предложений» .
Создайте таблицу предложений
Когда вы возвращаете предложения системе с помощью Cursor
, система ожидает увидеть определённые столбцы в каждой строке. Независимо от того, храните ли вы данные предложений в базе данных SQLite на устройстве, в базе данных на веб-сервере или в другом формате на устройстве или в сети, отформатируйте предложения как строки в таблице и представьте их с помощью Cursor
.
Система понимает несколько столбцов, но обязательными являются только два из них:
-
_ID
- Уникальный целочисленный идентификатор строки для каждого предложения. Это необходимо системе для отображения предложений в
ListView
. -
SUGGEST_COLUMN_TEXT_1
- Строка, представленная в качестве предложения.
Все следующие столбцы являются необязательными. Большинство из них будут подробно рассмотрены в следующих разделах.
-
SUGGEST_COLUMN_TEXT_2
- Строка. Если
Cursor
включает этот столбец, все предложения отображаются в двухстрочном формате. Строка в этом столбце отображается как вторая, более короткая строка текста под основным текстом предложения. Она может быть пустой или нулевой, что означает отсутствие дополнительного текста. -
SUGGEST_COLUMN_ICON_1
- Строка URI ресурса, контента или файла, доступного для рисования. Если ваш
Cursor
включает этот столбец, все предложения отображаются в формате «значок плюс текст» со значком, доступным для рисования, слева. Значение может быть null или нулевым, что означает отсутствие значка в этой строке. -
SUGGEST_COLUMN_ICON_2
- Строка URI ресурса, контента или файла, доступного для рисования. Если ваш
Cursor
включает этот столбец, все предложения отображаются в формате «значок плюс текст», где значок находится справа. Значение может быть null или нулевым, что означает отсутствие значка в этой строке. -
SUGGEST_COLUMN_INTENT_ACTION
- Строка действия намерения. Если этот столбец существует и содержит значение в указанной строке, при формировании намерения предложения используется действие, указанное здесь. Если элемент не указан, действие берётся из поля
android:searchSuggestIntentAction
в конфигурации поиска. Если действие одинаково для всех предложений, эффективнее указать действие с помощьюandroid:searchSuggestIntentAction
и опустить этот столбец. -
SUGGEST_COLUMN_INTENT_DATA
- Строка URI данных. Если этот столбец существует и содержит значение в указанной строке, эти данные используются при формировании намерения предложения. Если элемент не указан, данные берутся из поля
android:searchSuggestIntentData
в вашей конфигурации поиска. Если ни один из источников не указан, поле данных намерения равно NULL. Если ваши данные одинаковы для всех предложений или могут быть описаны с помощью константной части и конкретного идентификатора, эффективнее указать их с помощьюandroid:searchSuggestIntentData
и опустить этот столбец. -
SUGGEST_COLUMN_INTENT_DATA_ID
- Строка пути URI. Если этот столбец существует и содержит значение в указанной строке, то к полю данных в намерении добавляется символ "/", и это значение добавляется к полю данных. Используйте этот вариант только в том случае, если поле данных, указанное атрибутом
android:searchSuggestIntentData
в конфигурации поиска, уже имеет соответствующую базовую строку. -
SUGGEST_COLUMN_INTENT_EXTRA_DATA
- Произвольные данные. Если этот столбец существует и содержит значение в заданной строке, это дополнительные данные, используемые при формировании намерения предложения. Если поле дополнительных данных намерения не указано, оно равно нулю. Этот столбец позволяет предложениям предоставлять дополнительные данные, которые включаются в ключ
EXTRA_DATA_KEY
намерения. -
SUGGEST_COLUMN_QUERY
- Если этот столбец существует и этот элемент присутствует в заданной строке, эти данные используются при формировании запроса предложения и включаются в качестве дополнительных в ключ
QUERY
намерения. Это обязательное поле, если действие предложения —ACTION_SEARCH
, в противном случае — необязательное. -
SUGGEST_COLUMN_SHORTCUT_ID
- Используется только при предоставлении подсказок для поля быстрого поиска. В этом столбце указывается, нужно ли сохранять подсказку в виде ярлыка и нужно ли её проверять. Ярлыки обычно формируются, когда пользователь нажимает на подсказку в поле быстрого поиска. Если этот параметр отсутствует, результат сохраняется в виде ярлыка и никогда не обновляется. Если установлено значение
SUGGEST_NEVER_MAKE_SHORTCUT
, результат не сохраняется в виде ярлыка. В противном случае идентификатор ярлыка используется для проверки актуальности подсказки с помощьюSUGGEST_URI_PATH_SHORTCUT
. -
SUGGEST_COLUMN_SPINNER_WHILE_REFRESHING
- Используется только при предоставлении подсказок для поля быстрого поиска. Этот столбец указывает, что вместо значка из
SUGGEST_COLUMN_ICON_2
должен отображаться вращающийся круг, а ярлык этой подсказки — обновление в поле быстрого поиска.
Большинство из этих столбцов обсуждаются более подробно в следующих разделах.
Заявите о намерении вносить предложения
Когда пользователь выбирает предложение из списка, отображаемого под диалоговым окном поиска или виджетом, система отправляет индивидуальное Intent
в вашу поисковую активность. Вам необходимо определить действие и данные для намерения.
Объявить о намерении действий
Наиболее распространённым действием намерения для пользовательской подсказки является ACTION_VIEW
, которое подходит, когда вы хотите открыть что-либо, например, определение слова, контактную информацию человека или веб-страницу. Однако действием намерения может быть любое другое действие, и оно может быть разным для каждой подсказки.
В зависимости от того, хотите ли вы, чтобы все предложения использовали одно и то же намерение, вы можете определить действие двумя способами:
- Используйте атрибут
android:searchSuggestIntentAction
вашего файла конфигурации поиска, чтобы определить действие для всех предложений, как показано в следующем примере:<?xml version="1.0" encoding="utf-8"?> <searchable xmlns:android="http://schemas.android.com/apk/res/android" android:label="@string/app_label" android:hint="@string/search_hint" android:searchSuggestAuthority="com.example.MyCustomSuggestionProvider" android:searchSuggestIntentAction="android.intent.action.VIEW" > </searchable>
- Используйте столбец
SUGGEST_COLUMN_INTENT_ACTION
для определения действия для отдельных предложений. Для этого добавьте столбецSUGGEST_COLUMN_INTENT_ACTION
в таблицу предложений и для каждого предложения укажите в нём действие, которое необходимо выполнить, например,"android.intent.action.VIEW"
.
Вы также можете комбинировать эти два метода. Например, можно включить атрибут android:searchSuggestIntentAction
с действием, которое будет использоваться по умолчанию со всеми предложениями, а затем переопределить это действие для некоторых предложений, объявив другое действие в столбце SUGGEST_COLUMN_INTENT_ACTION
. Если значение в столбце SUGGEST_COLUMN_INTENT_ACTION
не указано, будет использоваться намерение, указанное в атрибуте android:searchSuggestIntentAction
.
Объявить данные о намерениях
Когда пользователь выбирает предложение, ваша поисковая активность получает намерение с действием, которое вы определили (как обсуждалось в предыдущем разделе), но намерение также должно содержать данные, позволяющие вашей активности определить, какое предложение выбрано. В частности, данные должны быть уникальными для каждого предложения, например, идентификатор строки предложения в таблице SQLite. После получения намерения вы можете получить прикреплённые данные с помощью getData()
или getDataString()
.
Вы можете определить данные, включенные в намерение, двумя способами:
- Определите данные для каждого предложения в столбце
SUGGEST_COLUMN_INTENT_DATA
таблицы предложений.Предоставьте всю необходимую информацию для каждого намерения в таблице предложений, включив столбец
SUGGEST_COLUMN_INTENT_DATA
и заполнив его уникальными данными для каждой строки. Данные из этого столбца прикрепляются к намерению точно так же, как вы их определили в этом столбце. Затем их можно получить с помощьюgetData()
илиgetDataString()
. - Разделите URI данных на две части: часть, общую для всех предложений, и часть, уникальную для каждого предложения. Поместите эти части в атрибут
android:searchSuggestintentData
конфигурации поиска и столбецSUGGEST_COLUMN_INTENT_DATA_ID
таблицы предложений соответственно.В следующем примере показано, как объявить часть URI, общую для всех предложений в атрибуте
android:searchSuggestIntentData
вашей конфигурации поиска:<?xml version="1.0" encoding="utf-8"?> <searchable xmlns:android="http://schemas.android.com/apk/res/android" android:label="@string/app_label" android:hint="@string/search_hint" android:searchSuggestAuthority="com.example.MyCustomSuggestionProvider" android:searchSuggestIntentAction="android.intent.action.VIEW" android:searchSuggestIntentData="content://com.example/datatable" > </searchable>
Включите окончательный путь для каждого предложения — уникальную часть — в столбец
SUGGEST_COLUMN_INTENT_DATA_ID
таблицы предложений. Когда пользователь выбирает предложение, система берёт строку изandroid:searchSuggestIntentData
, добавляет к ней косую черту ( / ), а затем добавляет соответствующее значение из столбцаSUGGEST_COLUMN_INTENT_DATA_ID
, формируя полный URI контента. После этого вы можете получитьUri
с помощьюgetData()
.
Добавить больше данных
Если вам нужно выразить больше информации о намерении, вы можете добавить ещё один столбец таблицы, например, SUGGEST_COLUMN_INTENT_EXTRA_DATA
, в котором будет храниться дополнительная информация о предложении. Данные, сохранённые в этом столбце, помещаются в ключ EXTRA_DATA_KEY
дополнительного пакета намерения.
Управляйте намерением
После того, как вы предоставите пользовательские поисковые подсказки с пользовательскими намерениями, ваша поисковая активность должна обрабатывать эти намерения, когда пользователь выбирает подсказку. Это необходимо в дополнение к обработке намерения ACTION_SEARCH
, которое ваша поисковая активность уже выполняет. Вот пример того, как можно обрабатывать намерения во время обратного вызова onCreate()
вашей активности:
Котлин
when(intent.action) { Intent.ACTION_SEARCH -> { // Handle the normal search query case. intent.getStringExtra(SearchManager.QUERY)?.also { query -> doSearch(query) } } Intent.ACTION_VIEW -> { // Handle a suggestions click, because the suggestions all use ACTION_VIEW. showResult(intent.data) } }
Ява
Intent intent = getIntent(); if (Intent.ACTION_SEARCH.equals(intent.getAction())) { // Handle the normal search query case. String query = intent.getStringExtra(SearchManager.QUERY); doSearch(query); } else if (Intent.ACTION_VIEW.equals(intent.getAction())) { // Handle a suggestions click, because the suggestions all use ACTION_VIEW. Uri data = intent.getData(); showResult(data); }
В этом примере действие намерения — ACTION_VIEW
, а данные содержат полный URI, указывающий на предложенный элемент, синтезированный на основе строки android:searchSuggestIntentData
и столбца SUGGEST_COLUMN_INTENT_DATA_ID
. Затем URI передается локальному методу showResult()
, который запрашивает у поставщика контента элемент, указанный в URI.
Перепишите текст запроса
По умолчанию, если пользователь перемещается по списку предложений с помощью элементов управления, например, трекбола или крестовины, текст запроса не обновляется. Однако вы можете временно заменить текст запроса пользователя, отображаемый в текстовом поле, запросом, соответствующим предложению, находящемуся в фокусе. Это позволяет пользователю видеть предлагаемый запрос, выбирать поле поиска и редактировать его перед отправкой в качестве поиска.
Вы можете переписать текст запроса следующими способами:
- Добавьте атрибут
android:searchMode
в конфигурацию поиска со значением"queryRewriteFromText"
. В этом случае для перезаписи текста запроса будет использоваться содержимое столбцаSUGGEST_COLUMN_TEXT_1
предложения. - Добавьте атрибут
android:searchMode
в конфигурацию searchable\ со значением"queryRewriteFromData"
. В этом случае для перезаписи текста запроса используется содержимое столбцаSUGGEST_COLUMN_INTENT_DATA
предложения. Используйте это только с URI или другими форматами данных, которые должны быть видны пользователю, например, HTTP-URL. Не используйте внутренние схемы URI для перезаписи запроса таким образом. - Введите уникальную строку текста запроса в столбце
SUGGEST_COLUMN_QUERY
таблицы предложений. Если этот столбец присутствует и содержит значение для текущего предложения, оно используется для перезаписи текста запроса и переопределения любой из предыдущих реализаций.
Отобразить поисковые подсказки в поле быстрого поиска
После настройки приложения для предоставления пользовательских поисковых предложений сделать их доступными для глобально доступного поля быстрого поиска так же просто, как изменить конфигурацию поиска, включив android:includeInGlobalSearch
со значением "true"
.
Единственный сценарий, в котором требуются дополнительные действия, — это когда ваш поставщик контента запрашивает разрешение на чтение. В этом случае вам необходимо добавить элемент <path-permission>
, чтобы поставщик предоставил вашему поставщику контента доступ к полю быстрого поиска на чтение, как показано в следующем примере:
<provider android:name="MySuggestionProvider" android:authorities="com.example.MyCustomSuggestionProvider" android:readPermission="com.example.provider.READ_MY_DATA" android:writePermission="com.example.provider.WRITE_MY_DATA"> <path-permission android:pathPrefix="/search_suggest_query" android:readPermission="android.permission.GLOBAL_SEARCH" /> </provider>
В этом примере поставщик ограничивает доступ к контенту на чтение и запись. Элемент <path-permission>
снимает ограничение, предоставляя доступ на чтение к контенту внутри префикса пути "/search_suggest_query"
при наличии разрешения "android.permission.GLOBAL_SEARCH"
. Это предоставляет доступ к полю быстрого поиска, чтобы оно могло запрашивать у вашего поставщика контента подсказки.
Если ваш поставщик контента не обеспечивает принудительное разрешение на чтение, то поле быстрого поиска считывает его по умолчанию.
Включить предложения на устройстве
По умолчанию приложения не могут предлагать подсказки в поле быстрого поиска, даже если они настроены на это. Пользователь выбирает, следует ли добавлять подсказки из вашего приложения в поле быстрого поиска, открыв раздел «Элементы для поиска » в разделе «Настройки» > «Поиск » и включив функцию поиска вашего приложения.
Для каждого приложения, доступного для поля быстрого поиска, есть запись на странице настроек элементов поиска . Эта запись включает название приложения и краткое описание контента, доступного для поиска из приложения и предлагаемого для подсказок в поле быстрого поиска. Чтобы определить текст описания для вашего приложения, доступного для поиска, добавьте атрибут android:searchSettingsDescription
в конфигурацию поиска, как показано в следующем примере:
<?xml version="1.0" encoding="utf-8"?> <searchable xmlns:android="http://schemas.android.com/apk/res/android" android:label="@string/app_label" android:hint="@string/search_hint" android:searchSuggestAuthority="com.example.MyCustomSuggestionProvider" android:searchSuggestIntentAction="android.intent.action.VIEW" android:includeInGlobalSearch="true" android:searchSettingsDescription="@string/search_description" > </searchable>
Строка для android:searchSettingsDescription
должна быть максимально лаконичной и содержать информацию о контенте, по которому можно выполнить поиск. Например, «Исполнители, альбомы и треки» для музыкального приложения или «Сохранённые заметки» для приложения-блокнота. Важно предоставить это описание, чтобы пользователь понимал, какие варианты предлагаются. Всегда включайте этот атрибут, если android:includeInGlobalSearch
имеет значение true.
Поскольку пользователю необходимо открыть меню настроек, чтобы включить поисковые подсказки в вашем приложении, если поиск — важный аспект вашего приложения, подумайте, как донести эту информацию до пользователей. Например, при первом запуске приложения можно добавить заметку с объяснением, как включить поисковые подсказки для поля быстрого поиска.
Управление подсказками в поле быстрого поиска
Предложения, выбранные пользователем в поле быстрого поиска, могут автоматически преобразовываться в ярлыки. Это предложения, которые система копирует у вашего поставщика контента, чтобы иметь возможность быстро получить к ним доступ без необходимости повторного запроса к поставщику контента.
По умолчанию эта функция включена для всех предложений, полученных через поле быстрого поиска, но если данные предложений со временем изменятся, вы можете запросить обновление ярлыков. Например, если ваши предложения относятся к динамическим данным, таким как статус присутствия контакта, запросите обновление ярлыков предложений при их отображении пользователю. Для этого добавьте столбец SUGGEST_COLUMN_SHORTCUT_ID
в таблицу предложений. Вы можете использовать этот столбец для настройки поведения ярлыков для каждого предложения одним из следующих способов:
Заставьте поле быстрого поиска повторно запрашивать у поставщика контента свежую версию предлагаемого ярлыка.
Укажите значение в столбце
SUGGEST_COLUMN_SHORTCUT_ID
, чтобы предложение запрашивалось повторно для получения новой версии при каждом отображении ярлыка. Ярлык быстро отображается с последними доступными данными до тех пор, пока не будет получен запрос на обновление, после чего предложение обновляется новой информацией. Запрос на обновление отправляется вашему поставщику контента с URI-путемSUGGEST_URI_PATH_SHORTCUT
вместоSUGGEST_URI_PATH_QUERY
.Сделайте так, чтобы возвращаемый вами
Cursor
содержал одно предложение, используя те же столбцы, что и исходное предложение, или был пустым, указывая на то, что ярлык больше недействителен. В этом случае предложение исчезнет, а ярлык будет удален.Если предложение относится к данным, обновление которых может занять больше времени, например, при сетевом обновлении, вы также можете добавить столбец
SUGGEST_COLUMN_SPINNER_WHILE_REFRESHING
в таблицу предложений со значением true, чтобы отображался индикатор хода выполнения для значка справа до завершения обновления. Любое значение, отличное от true, не отображает индикатор хода выполнения.Полностью запретите копирование предложения в ярлык.
Укажите значение
SUGGEST_NEVER_MAKE_SHORTCUT
в столбцеSUGGEST_COLUMN_SHORTCUT_ID
. В этом случае предложение никогда не копируется в ярлык. Это необходимо только в том случае, если вы категорически не хотите, чтобы отображалось ранее скопированное предложение. Если указать для столбца обычное значение, ярлык предложения будет отображаться только до тех пор, пока не будет выполнен запрос на обновление.Позвольте применяться поведению сочетания клавиш по умолчанию.
Оставьте
SUGGEST_COLUMN_SHORTCUT_ID
пустым для каждого предложения, которое не изменяется и может быть сохранено как ярлык.
Если ни одно из ваших предложений не меняется, то столбец SUGGEST_COLUMN_SHORTCUT_ID
вам не нужен.
О рейтинге предложений в окне быстрого поиска
После того, как вы сделаете подсказки поиска вашего приложения доступными для поля быстрого поиска, ранжирование поля быстрого поиска определяет, как эти подсказки будут отображаться пользователю по конкретному запросу. Это может зависеть от того, сколько других приложений имеют результаты по этому запросу и как часто пользователь выбирает ваши результаты по сравнению с результатами других приложений. Нет никаких гарантий относительно того, как ранжируются ваши подсказки или будут ли они вообще отображаться для данного запроса. В целом, предоставление качественных результатов повышает вероятность того, что подсказки вашего приложения будут отображаться на видном месте, а приложения с некачественными подсказками, скорее всего, будут иметь более низкие позиции в рейтинге или вообще не будут отображаться.