При использовании диалогового окна или виджета поиска 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включается в URI, только если вы указали такой путь в файле конфигурации с атрибутомandroid:searchSuggestPath. Это необходимо, только если вы используете один и тот же поставщик контента для нескольких действий, поддерживающих поиск. В этом случае уточните источник запроса.projection- Всегда null.
selection- Значение, указанное в атрибуте
android:searchSuggestSelectionфайла конфигурации поиска, или null, если атрибутandroid:searchSuggestSelectionне объявлен. Подробнее об этом рассказывается в следующем разделе.selectionArgs- Содержит поисковый запрос в качестве первого и единственного элемента массива, если вы объявили атрибут
android:searchSuggestSelectionв конфигурации поиска. Если вы не объявитеandroid:searchSuggestSelection, то этот параметр будет иметь значение null. Подробнее об этом рассказывается в следующем разделе.sortOrder- Всегда null.
Система может отправлять вам текст поискового запроса двумя способами. По умолчанию текст запроса включается в качестве последнего пути URI контента, переданного в параметре uri. Однако если вы включите значение выбора в атрибут android:searchSuggestSelection конфигурации поиска, текст запроса будет передан в качестве первого элемента массива строк selectionArgs. Эти два варианта описаны
далее.
Получение запроса в URI
По умолчанию запрос добавляется в качестве последнего сегмента параметра uri – объекта Uri. Чтобы получить текст запроса в этом случае, используйте getLastPathSegment(), как показано в следующем примере:
Kotlin
val query: String = uri.lastPathSegment.toLowerCase()
Java
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 – как поисковый запрос. Когда вы передаете их методу SQLite query() в качестве соответствующих аргументов, они синтезируются вместе, то есть вопросительный знак заменяется текстом запроса. Если вы получаете запросы подсказок таким образом и вам нужно добавить в текст запроса подстановочные знаки, добавьте их в начало или конец параметра selectionArgs, поскольку это значение заключается в кавычки и вставляется вместо вопросительного знака.
Ещё один атрибут в примере выше – android:searchSuggestIntentAction. Он определяет действие, которое отправляется с каждым намерением, когда пользователь выбирает подсказку. Подробнее об этом рассказывается в разделе Объявление намерения для подсказок.
Создать таблицу с предложениями
Когда вы возвращаете системе подсказки с помощью Cursor, она ожидает, что в каждой строке будут определенные столбцы. Независимо от того, где вы храните данные подсказок (в базе данных SQLite на устройстве, в базе данных на веб-сервере или в другом формате на устройстве или в интернете), отформатируйте подсказки в виде строк в таблице и представьте их с помощью Cursor.
Система распознает несколько столбцов, но обязательными являются только два из них:
_ID- Уникальный целочисленный идентификатор строки для каждой подсказки. Это необходимо, чтобы система могла показывать подсказки в
ListView. SUGGEST_COLUMN_TEXT_1- Строка, которая показывается в качестве подсказки.
Все перечисленные ниже столбцы являются необязательными. Большинство из них подробно описаны в следующих разделах.
SUGGEST_COLUMN_TEXT_2- Строка. Если в файле
Cursorесть этот столбец, то все подсказки будут представлены в двухстрочном формате. Строка в этом столбце показывается как вторая, меньшая строка текста под основным текстом подсказки. Если дополнительного текста нет, значение может быть нулевым или пустым. SUGGEST_COLUMN_ICON_1- Строка URI прорисовываемого ресурса, контента или файла. Если в
Cursorесть этот столбец, то все подсказки будут представлены в формате "значок + текст", причем значок будет находиться слева. Если значок не нужен, укажите значение null или 0. SUGGEST_COLUMN_ICON_2- Строка URI прорисовываемого ресурса, контента или файла. Если в вашем файле
Cursorесть этот столбец, то все подсказки будут представлены в формате "значок + текст", причем значок будет находиться справа. Если значок не нужен, укажите значение null или 0. SUGGEST_COLUMN_INTENT_ACTION- Строка действия намерения. Если этот столбец существует и содержит значение в заданной строке, то при формировании намерения подсказки используется определенное здесь действие. Если элемент не указан, действие берется из поля
android:searchSuggestIntentActionв конфигурации поиска. Если вы хотите выполнить одно и то же действие для всех подсказок, проще указать его с помощьюandroid:searchSuggestIntentActionи не добавлять этот столбец. SUGGEST_COLUMN_INTENT_DATA- Строка URI данных. Если этот столбец существует и содержит значение в заданной строке, эти данные используются при формировании намерения подсказки. Если элемент не указан, данные берутся из поля
android:searchSuggestIntentDataв конфигурации поиска. Если ни один из источников не указан, поле данных намерения будет пустым. Если данные одинаковы для всех подсказок или могут быть описаны с помощью постоянной части и определенного идентификатора, эффективнее указать их с помощью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. Оно подходит, когда нужно что-то открыть, например определение слова, контактную информацию пользователя или веб-страницу.
Однако действие intent может быть любым и отличаться для каждой подсказки.
Если вы хотите, чтобы все подсказки использовали одно и то же действие intent, вы можете определить его двумя способами:
- Используйте атрибут
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().
Kotlin
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) } }
Java
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.
Переписать текст запроса
По умолчанию, если пользователь перемещается по списку подсказок с помощью элементов управления, таких как трекбол или D-pad, текст запроса не обновляется. Однако вы можете временно перезаписать текст запроса пользователя, как он отображается в текстовом поле, запросом, который соответствует выбранной подсказке. Пользователь увидит предложенный запрос и сможет выбрать окно поиска и изменить запрос перед отправкой.
Вы можете переписать текст запроса следующими способами:
- Добавьте атрибут
android:searchModeсо значением"queryRewriteFromText"в конфигурацию поиска. В этом случае для перезаписи текста запроса используется контент из столбцаSUGGEST_COLUMN_TEXT_1подсказки. - Добавьте атрибут
android:searchModeсо значением"queryRewriteFromData"в конфигурацию поиска. В этом случае для перезаписи текста запроса используется контент из столбцаSUGGEST_COLUMN_INTENT_DATAподсказки. Используйте этот способ только с URI или другими форматами данных, которые предназначены для показа пользователям, например с URL HTTP. Не используйте внутренние схемы 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, чтобы показывать индикатор выполнения для правого значка до завершения обновления. Если указано любое другое значение, индикатор не показывается.Запретить копирование подсказки в ярлык.
Укажите значение
SUGGEST_NEVER_MAKE_SHORTCUTв столбцеSUGGEST_COLUMN_SHORTCUT_ID. В этом случае подсказка не копируется в ярлык. Это нужно делать, только если вы абсолютно не хотите, чтобы появлялась ранее скопированная подсказка. Если вы укажете обычное значение для столбца, то ярлык подсказки будет показываться только до тех пор, пока не будет возвращен запрос на обновление.Использовать стандартное поведение ярлыков.
Оставьте поле
SUGGEST_COLUMN_SHORTCUT_IDпустым для каждой подсказки, которая не меняется и может быть сохранена как ярлык.
Если ваши подсказки никогда не меняются, то столбец SUGGEST_COLUMN_SHORTCUT_ID вам не нужен.
Рейтинг подсказок в окне быстрого поиска
После того как вы сделаете подсказки при поиске в приложении доступными для окна быстрого поиска, его ранжирование будет определять, как подсказки будут показываться пользователю по определенному запросу. Это может зависеть от того, сколько других приложений имеют результаты для этого запроса и как часто пользователь выбирает ваши результаты по сравнению с результатами из других приложений. Мы не гарантируем, что подсказки из вашего приложения будут показываться по определенному запросу или занимать определенную позицию. Как правило, качественные результаты повышают вероятность того, что подсказки из вашего приложения будут показываться на заметной позиции. Подсказки низкого качества могут быть понижены в рейтинге или не показаны.