Android官方文檔—User Interface(Search)(Adding Custom Suggestions)

添加自定義建議

使用Android搜索對話框或搜索小組件時,您可以提供根據應用程序中的數據創建的自定義搜索建議。例如,如果您的應用程序是單詞詞典,則可以建議詞典中與目前爲止輸入的文本匹配的單詞。這些是最有價值的建議,因爲您可以有效地預測用戶想要的內容並提供對其的即時訪問。圖1顯示了帶有自定義建議的搜索對話框的示例。

提供自定義建議後,您還可以將其提供給系統範圍的快速搜索框,以便從應用程序外部訪問您的內容。

在開始本指南添加自定義建議之前,您需要在應用程序中實現Android搜索對話框或搜索小部件以進行搜索。如果還沒有,請參閱創建搜索界面。

基礎


當用戶選擇自定義建議時,Android系統會向您的可搜索活動發送Intent。普通搜索查詢使用ACTION_SEARCH操作發送意圖,而您可以定義自定義建議以使用ACTION_VIEW(或任何其他意圖操作),還包括與所選建議相關的數據。繼續字典示例,當用戶選擇建議時,您的應用程序可以立即打開該單詞的定義,而不是在字典中搜索匹配項。

圖1.包含自定義搜索建議的搜索對話框
的屏幕截圖。

要提供自定義建議,請執行以下操作:

  • 實現基本的可搜索活動,如創建搜索界面中所述。
  • 使用有關提供自定義建議的內容提供商的信息修改可搜索配置。
  • 構建一個表(例如在SQLiteDatabase中)以獲取建議並使用必需的列格式化表。
  • 創建一個可以訪問您的建議表的內容提供者,並在清單中聲明提供者。
  • 聲明當用戶選擇建議(包括自定義操作和自定義數據)時要發送的Intent類型。

就像Android系統顯示搜索對話框一樣,它也會顯示您的搜索建議。您所需要的只是一個內容提供商,系統可以從中檢索您的建議。如果您不熟悉創建內容提供程序,請在繼續之前閱讀Content Providers開發人員指南。

當系統識別出您的活動是可搜索的並提供搜索建議時,在用戶鍵入查詢時會發生以下過​​程:

1.系統獲取搜索查詢文本(到目前爲止已輸入的任何內容),並對管理您的建議的內容提供商執行查詢。

2.您的內容提供商返回一個Cursor,指向與搜索查詢文本相關的所有建議。

3.系統顯示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。

有關爲自定義建議創建內容提供程序的詳細信息,請參閱以下兩節:

Handling the suggestion query

系統如何向您的內容提供商發送請求以及如何處理它們

Building a suggestion table

如何定義每個查詢返回的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編碼規則進行編碼,因此您可能需要在執行搜索之前對其進行解碼。

如果您在可搜索的配置文件中使用android:searchSuggestPath屬性設置了這樣的路徑,則optional.suggest.path部分僅包含在URI中。僅當您爲多個可搜索活動使用相同的內容提供程序時才需要這樣做,在這種情況下,您需要消除建議查詢的來源歧義。

注意:SUGGEST_URI_PATH_QUERY不是URI中提供的文字字符串,而是在需要引用此路徑時應使用的常量。

projection

始終爲空

selection

您的可搜索配置文件的android:searchSuggestSelection屬性中提供的值,如果尚未聲明android:searchSuggestSelection屬性,則爲null。有關使用它來獲取以下查詢的更多信息。

selectionArgs

如果已在可搜索配置中聲明瞭android:searchSuggestSelection屬性,則將搜索查詢包含爲數組的第一個(也是唯一的)元素。如果尚未聲明android:searchSuggestSelection,則此參數爲null。有關使用它來獲取以下查詢的更多信息。

sortOrder

始終爲空

系統可以通過兩種方式向您發送搜索查詢文本。默認方式是將查詢文本包含爲uri參數中傳遞的內容URI的最後一個路徑。但是,如果在可搜索配置的android:searchSuggestSelection屬性中包含選擇值,則查詢文本將作爲selectionArgs字符串數組的第一個元素傳遞。接下來總結兩種選擇。

在Uri中獲取查詢

默認情況下,查詢將作爲uri參數的最後一個段(Uri對象)附加。要在這種情況下檢索查詢文本,只需使用getLastPathSegment()。例如:

String query = uri.getLastPathSegment().toLowerCase();

這將返回Uri的最後一段,即用戶輸入的查詢文本。

在選擇參數中獲取查詢

您可能認爲查詢()方法接收執行查找所需的所有內容並且您希望selection和selectionArgs參數帶有適當的值,而不是使用URI。在這種情況下,使用您的SQLite選擇字符串將android:searchSuggestSelection屬性添加到您的可搜索配置中。在選擇字符串中,包含一個問號(“?”)作爲實際搜索查詢的佔位符。系統調用query(),選擇字符串作爲選擇參數,搜索查詢作爲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()方法將選擇參數作爲“單詞匹配?”提供。和selectionArgs參數作爲搜索查詢。當您將這些傳遞給SQLite query()方法時,作爲它們各自的參數,它們被合成在一起(問號被查詢文本替換)。如果您選擇以這種方式接收建議查詢並需要在查詢文本中添加通配符,請將它們附加(和/或前綴)到selectionArgs參數,因爲此值包含在引號中並插入代替問號。

上例中的另一個新屬性是android:searchSuggestIntentAction,它定義了當用戶選擇建議時隨每個意圖發送的意圖動作。有關聲明建議意圖的部分將進一步討論。

提示:如果您不想在android:searchSuggestSelection屬性中定義選擇子句,但仍希望在selectionArgs參數中接收查詢文本,只需爲android:searchSuggestSelection屬性提供非null值。這會觸發在selectionArgs中傳遞的查詢,您可以忽略選擇參數。通過這種方式,您可以在較低級別定義實際選擇子句,以便您的內容提供者不必處理它。

建立一個建議表

當您使用Cursor向系統返回建議時,系統需要每行中的特定列。因此,無論您是否決定將建議數據存儲在設備上的SQLite數據庫,Web服務器上的數據庫或設備或Web上的其他格式中,您都必須將建議格式化爲表格中的行並將其顯示爲一個光標。系統瞭解多個列,但只需要兩個:

創建沒有表的遊標

如果您的搜索建議未使用系統所需的列以表格格式(例如SQLite表格)存儲,則可以在建議數據中搜索匹配項,然後將其格式化爲每個請求的必要表格。爲此,請使用所需的列名創建MatrixCursor,然後使用addRow(Object [])爲每個建議添加一行。從Content Provider的query()方法返回最終產品。

_ID

每個建議的唯一整數行ID。系統需要這樣才能在ListView中顯示建議。

SUGGEST_COLUMN_TEXT_1

作爲建議呈現的字符串。

以下列都是可選的(大多數將在以下部分中進一步討論):

SUGGEST_COLUMN_TEXT_2

一個字符串。如果您的Cursor包含此列,則所有建議都以兩行格式提供。此列中的字符串顯示爲主要建議文本下方的第二個較小的文本行。它可以爲null或空,表示沒有輔助文本。

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字段中獲取。如果未提供任何源,則intent的數據字段爲null。如果您的數據對於所有建議都相同,或者可以使用常量部分和特定ID來描述,則使用android:searchSuggestIntentData指定它並且省略此列更有效。

SUGGEST_COLUMN_INTENT_DATA_ID

URI路徑字符串。如果此列存在且包含給定行的值,則“/”將此值附加到intent中的數據字段。只有在可搜索配置中由android:searchSuggestIntentData屬性指定的數據字段已設置爲適當的基本字符串時,才應使用此選項。

SUGGEST_COLUMN_INTENT_EXTRA_DATA

任意數據。如果此列存在且包含給定行的值,則這是在形成建議意圖時使用的額外數據。如果未提供,則intent的額外數據字段爲null。此列允許建議提供附加數據,這些數據作爲intent的EXTRA_DATA_KEY鍵中的額外數據包含在內。

SUGGEST_COLUMN_QUERY

如果此列存在並且此元素存在於給定行,則這是在形成建議的查詢時使用的數據,在intent的QUERY鍵中作爲額外包含。如果建議的操作是ACTION_SEARCH,則是必需的,否則是可選的。

SUGGEST_COLUMN_SHORTCUT_ID

僅在爲快速搜索框提供建議時使用。此列指示是否應將搜索建議存儲爲快捷方式以及是否應對其進行驗證。當用戶單擊快速搜索框中的建議時,通常會形成快捷方式。如果缺少,結果將存儲爲快捷方式,並且永遠不會刷新。如果設置爲SUGGEST_NEVER_MAKE_SHORTCUT,則結果不會存儲爲快捷方式。否則,快捷方式ID用於使用SUGGEST_URI_PATH_SHORTCUT檢查最新建議。

SUGGEST_COLUMN_SPINNER_WHILE_REFRESHING

僅在爲快速搜索框提供建議時使用。此列指定在快速搜索框中刷新此建議的快捷方式時,應顯示微調器而不是SUGGEST_COLUMN_ICON_2中的圖標。

以下各節將更詳細地討論其中一些列。

聲明建議意圖


當用戶從搜索對話框或窗口小部件下方顯示的列表中選擇建議時,系統會向您的可搜索活動發送自定義意圖。您必須定義intent的操作和數據。

聲明意圖行動

自定義建議最常見的意圖操作是ACTION_VIEW,當您想要打開某些內容時,它是合適的,例如單詞的定義,人物的聯繫信息或網頁。但是,意圖動作可以是任何其他動作,甚至可以對每個建議不同。

根據您是否希望所有建議都使用相同的意圖操作,您可以通過兩種方式定義操作:

2.使用可搜索配置文件的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>

b.使用SUGGEST_COLUMN_INTENT_ACTION列定義各個建議的操作。

將SUGGEST_COLUMN_INTENT_ACTION列添加到您的建議表中,併爲每個建議添加要使用的操作(例如“android.Intent.action.VIEW”)。

您也可以將這兩種技術結合起來。例如,您可以包含android:searchSuggestIntentAction屬性以及默認情況下與所有建議一起使用的操作,然後通過在SUGGEST_COLUMN_INTENT_ACTION列中聲明不同的操作來覆蓋此操作以獲取某些建議。如果未在SUGGEST_COLUMN_INTENT_ACTION列中包含值,則使用android:searchSuggestIntentAction屬性中提供的intent。

注意:如果在可搜索配置中未包含android:searchSuggestIntentAction屬性,則必須在SUGGEST_COLUMN_INTENT_ACTION列中爲每個建議添加一個值,否則意圖將失敗。

聲明意圖數據

當用戶選擇建議時,您的可搜索活動會收到您已定義的操作的意圖(如上一節所述),但意圖也必須攜帶數據,以便您的活動識別選擇了哪個建議。具體來說,數據應該是每個建議的唯一內容,例如SQLite表中建議的行ID。收到intent後,您可以使用getData()或getDataString()檢索附加數據。

您可以通過兩種方式定義意圖中包含的數據:

a.在建議表的SUGGEST_COLUMN_INTENT_DATA列中定義每個建議的數據。

通過包含SUGGEST_COLUMN_INTENT_DATA列,然後使用每行的唯一數據填充它,爲建議表中的每個intent提供所有必要的數據信息。此列中的數據與您在此列中定義的內容完全相同。然後,您可以使用getData()或getDataString()來檢索它。

提示:通常最簡單的方法是將表的行ID用作Intent數據,因爲它始終是唯一的。最簡單的方法是使用SUGGEST_COLUMN_INTENT_DATA列名作爲行ID列的別名。有關SQLiteQueryBuilder創建列名稱到別名的投影映射的示例,請參閱Searchable Dictionary示例應用程序。

b.將數據URI分段爲兩部分:所有建議共有的部分和每個建議的唯一部分。將這些部分分別放入可搜索配置的android:searchSuggestintentData屬性和建議表的SUGGEST_COLUMN_INTENT_DATA_ID列中。

聲明可搜索配置的android:searchSuggestIntentData屬性中所有建議共有的URI片段。例如:

<?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。然後,您可以使用getData()檢索Uri。

添加更多數據

如果您需要根據自己的意圖表達更多信息,可以添加另一個表格列SUGGEST_COLUMN_INTENT_EXTRA_DATA,該列可以存儲有關該建議的其他信息。保存在此列中的數據放在intent的額外Bundle的EXTRA_DATA_KEY中。

處理意圖


現在您使用自定義意圖提供自定義搜索建議,當用戶選擇建議時,您需要可搜索的活動來處理這些意圖。這是處理您的可搜索活動已經執行的ACTION_SEARCH目的的補充。以下是您在活動onCreate()回調期間如何處理意圖的示例:

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);
}

在此示例中,intent操作是ACTION_VIEW,數據帶有指向建議項的完整URI,由android:searchSuggestIntentData字符串和SUGGEST_COLUMN_INTENT_DATA_ID列合成。然後將URI傳遞給本地showResult()方法,該方法向內容提供程序查詢URI指定的項目。

注意:您不需要爲Android清單文件添加意圖過濾器,以用於使用android:searchSuggestIntentAction屬性或SUGGEST_COLUMN_INTENT_ACTION列定義的intent操作。系統按名稱打開您的可搜索活動以提供建議的意圖,因此活動不需要聲明已接受的操作。

重寫查詢文本


如果用戶使用方向控件(例如使用軌跡球或d-pad)瀏覽建議列表,則默認情況下查詢文本不會更新。但是,您可以臨時重寫用戶的查詢文本,因爲它顯示在文本框中,其查詢與當前焦點的建議相匹配。這使用戶能夠查看正在建議的查詢(如果適用),然後選擇搜索框並編輯查詢,然後再將其作爲搜索發送。

您可以通過以下方式重寫查詢文本:

a.使用“queryRewriteFromText”值將android:searchMode屬性添加到您的可搜索配置中。在這種情況下,來自建議的SUGGEST_COLUMN_TEXT_1列的內容用於重寫查詢文本。

b.使用“queryRewriteFromData”值將android:searchMode屬性添加到您的可搜索配置中。在這種情況下,建議的SUGGEST_COLUMN_INTENT_DATA列中的內容用於重寫查詢文本。這應僅用於URI或其他旨在用戶可見的數據格式,例如HTTP URL。不應使用內部URI方案以這種方式重寫查詢。

c.在建議表的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>

在此示例中,提供程序限制對內容的讀寫訪問。當存在“android.permission.GLOBAL_SEARCH”權限時,<path-permission>元素通過授予對“/ search_suggest_query”路徑前綴內的內容的讀訪問權來修改限制。這將授予對快速搜索框的訪問權限,以便它可以向您的內容提供商查詢建議。

如果您的內容提供商未強制執行讀取權限,則快速搜索框可以默認讀取它。

在設備上啓用建議

當您的應用程序配置爲在快速搜索框中提供建議時,默認情況下,它實際上無法在快速搜索框中提供建議。用戶可以選擇是否在快速搜索框中包含應用程序中的建議。要從您的應用程序啓用搜索建議,用戶必須打開“可搜索項目”(在“設置”>“搜索”中),並將您的應用程序作爲可搜索項目啓用。

快速搜索框可用的每個應用程序在“可搜索項目設置”頁面中都有一個條目。該條目包括應用程序的名稱以及可以從應用程序中搜索的內容的簡短描述,並可在快速搜索框中提供建議。要爲可搜索的應用程序定義描述文本,請將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”時,您應該始終包含此屬性。

請記住,在快速搜索框中顯示搜索建議之前,用戶必須訪問設置菜單以啓用應用程序的搜索建議。因此,如果搜索是您的應用程序的一個重要方面,那麼您可能需要考慮一種方式將其傳達給您的用戶 - 您可能會在他們第一次啓動應用程序時提供說明,指示他們如何爲Quick啓用搜索建議搜索框。

管理快速搜索框建議快捷方式

用戶從快速搜索框中選擇的建議可以自動轉換爲快捷方式。這些是系統從您的內容提供商複製的建議,因此它可以快速訪問建議,而無需重新查詢您的內容提供商。

默認情況下,爲快速搜索框檢索的所有建議啓用此功能,但如果建議數據隨時間變化,則可以請求刷新快捷方式。例如,如果您的建議涉及動態數據,例如聯繫人的在線狀態,那麼您應該在向用戶顯示時請求刷新建議快捷方式。爲此,請在建議表中包含SUGGEST_COLUMN_SHORTCUT_ID。使用此列,您可以通過以下方式之一配置每個建議的快捷方式行爲:

a.讓快速搜索框重新查詢您的內容提供商,以獲得新版本的建議快捷方式。

在SUGGEST_COLUMN_SHORTCUT_ID列中提供值,並在每次顯示快捷方式時重新查詢新建版本的建議。在刷新查詢返回之前,快捷方式會快速顯示最近可用的任何數據,此時將使用新信息刷新建議。刷新查詢將以URI路徑SUGGEST_URI_PATH_SHORTCUT(而不是SUGGEST_URI_PATH_QUERY)發送到您的內容提供商。

您返回的光標應包含一個使用與原始建議相同的列的建議,或者爲空,表示該快捷方式不再有效(在這種情況下,建議消失並刪除快捷方式)。

如果一個建議是指可能需要更長的時間來刷新,如基於網絡的更新數據,你也可以在SUGGEST_COLUMN_SPINNER_WHILE_REFRESHING柱,以“真”的值,以顯示右手進度微調添加到您的建議表圖標,直到刷新完成。除“true”以外的任何值都不會顯示進度微調器。

b.防止將建議複製到快捷方式中。

在SUGGEST_COLUMN_SHORTCUT_ID列中提供SUGGEST_NEVER_MAKE_SHORTCUT的值。在這種情況下,建議永遠不會複製到快捷方式中。只有在您絕對不希望出現以前複製的建議時才應該這樣做。 (回想一下,如果爲列提供正常值,則建議快捷方式僅在刷新查詢返回之前出現。)

c.允許應用默認快捷方式行爲。

對於每個不會更改的建議,請將SUGGEST_COLUMN_SHORTCUT_ID保留爲空,並將其保存爲快捷方式。

如果您的建議都沒有改變,那麼您根本不需要SUGGEST_COLUMN_SHORTCUT_ID列。

注意:快速搜索框最終決定是否爲建議創建快捷方式,將這些值視爲應用程序的強烈請求 - 無法保證您爲建議快捷方式請求的行爲將受到尊重。

關於快速搜索框建議排名

將應用程序的搜索建議提供給快速搜索框後,快速搜索框排名將確定如何針對特定查詢向用戶顯示建議。這可能取決於有多少其他應用有該查詢的結果,以及用戶選擇結果與其他應用相比的頻率。無法保證您的建議的排名方式,也不保證您的應用建議是否針對特定查詢顯示。一般而言,您可以預期提供高質量的結果會增加您的應用建議在顯着位置提供的可能性,而提供低質量建議的應用更有可能排名較低或未顯示。

有關自定義搜索建議的完整演示,請參閱Searchable Dictionary示例應用程序。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章