使用 Android 搜尋對話方塊或搜尋小工具時,您可以提供根據應用程式資料建立的自訂搜尋建議。舉例來說,如果應用程式是字典,您可以在使用者輸入查詢前,從字典中依據輸入的文字建議字詞。這些建議非常實用,因為可以有效預測使用者需求,並立即存取這些資料。圖 1 是包含自訂建議的搜尋對話方塊範例。
在您提供自訂建議後,您也可以將自訂建議提供給整個系統的快速搜尋框,讓開發人員從應用程式以外的位置存取內容。
新增自訂建議之前,請實作 Android 搜尋對話方塊或搜尋小工具,以便在應用程式中搜尋。請參閱「建立搜尋介面」和「內容供應器」。
基本概念
使用者選取自訂建議時,系統會將 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
,以指向其判定適合建議的資料列。
如要進一步瞭解如何建立用於自訂建議的內容供應器,請參閱下列兩個章節:
處理建議查詢
當系統向內容供應器要求建議時,會呼叫內容供應器的 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
屬性設定這類路徑,才會包含在 URI 中optional.suggest.path
部分。只有在多個可搜尋活動使用相同的內容供應器時,才需要使用這個名稱。在這種情況下,請區別建議查詢的來源。projection
- 一律為空值。
selection
- 可供搜尋設定檔的
android:searchSuggestSelection
屬性提供的值;如果您未宣告android:searchSuggestSelection
屬性,則為空值。下節會進一步討論。selectionArgs
- 如果您在可搜尋的設定中宣告
android:searchSuggestSelection
屬性,該查詢會包含搜尋查詢做為陣列的第一個元素。如果您未宣告android:searchSuggestSelection
,則這個參數為空值。下節將進一步說明。sortOrder
- 一律為空值。
系統可透過兩種方式將搜尋查詢文字傳送給您。根據預設,系統會將查詢文字納入 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
參數提供適當的值。在此情況下,請使用 SQLite 選取字串,將 android:searchSuggestSelection
屬性新增至可供搜尋的設定。在選取字串中,請加入問號 (?) 做為實際搜尋查詢的預留位置。系統會將選取字串做為 selection
參數來呼叫 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()
方法會將 selection
參數做為 "word MATCH ?"
和 selectionArgs
參數傳送做為搜尋查詢。當您將這些引數傳遞至 SQLite query()
方法作為各自對應的引數時,系統會一併合成這些引數,也就是說,問號會替換為查詢文字。如果您透過這種方式接收建議查詢,而且需要在查詢文字中加入萬用字元,請在 selectionArgs
參數中附加或前置字元,因為這個值會以引號括住,並且插入來取代問號。
上述範例的另一個屬性是 android:searchSuggestIntentAction
,其定義使用者選取建議時,每個意圖傳送的意圖動作。如要進一步瞭解上述做法,請參閱「宣告建議的意圖」一節。
建立建議表格
使用 Cursor
將建議傳回系統時,系統會預期每一列中的特定資料欄。無論您會將建議資料儲存在裝置上的 SQLite 資料庫、網路伺服器中的資料庫,或是裝置或網路上的其他格式,請將建議格式化為資料表中的資料列,並使用 Cursor
呈現。
系統可以瞭解幾個欄,但只需要兩個欄:
_ID
- 每項建議的專屬整數資料列 ID。系統要求這項設定才能在
ListView
中顯示建議。 SUGGEST_COLUMN_TEXT_1
- 以建議的形式呈現的字串。
以下各欄皆為選填。我們會在以下各節中進一步說明。
SUGGEST_COLUMN_TEXT_2
- 字串。如果您的
Cursor
包含此欄,則所有建議都會以兩行格式提供。此欄中的字串會以第二行文字顯示在主要建議文字下方。值可以是空值或空白,表示沒有次要文字。 SUGGEST_COLUMN_ICON_1
- 可繪製資源、內容或檔案 URI 字串。如果
Cursor
包含此欄,系統會以圖示加號文字格式提供所有建議,並在左側顯示可繪項目圖示。這個值可以是空值或零,表示這個資料列中沒有任何圖示。 SUGGEST_COLUMN_ICON_2
- 可繪製資源、內容或檔案 URI 字串。如果
Cursor
包含此欄,則所有建議都會以圖示 + 文字格式提供,右側圖示。這個值可以是空值或零,表示這個資料列中沒有任何圖示。 SUGGEST_COLUMN_INTENT_ACTION
- 意圖動作字串。如果這個資料欄確實存在,且在特定資料列包含值,系統就會使用這裡定義的動作來建立建議意圖。如未提供元素,系統會從搜尋設定中的
android:searchSuggestIntentAction
欄位執行動作。如果所有建議的動作都相同,建議您使用android:searchSuggestIntentAction
指定動作,並省略此欄。 SUGGEST_COLUMN_INTENT_DATA
- 資料 URI 字串。如果這個資料欄存在且在指定資料列包含值,系統就會在建立建議意圖時使用這項資料。如未提供元素,系統會從搜尋設定中的
android:searchSuggestIntentData
欄位擷取資料。如果未提供來源,意圖的資料欄位為空值。如果所有建議的資料都相同,或是使用常數部分和特定 ID 來描述,則使用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
,則結果不會儲存為捷徑。否則,系統會使用捷徑 ID 透過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 資料表中建議的資料列 ID。收到意圖時,您可以使用 getData()
或 getDataString()
擷取附加的資料。
您可以透過下列兩種方式定義包含意圖的資料:
- 在建議表格的
SUGGEST_COLUMN_INTENT_DATA
欄中,定義每項建議的資料。在建議表格中加入
SUGGEST_COLUMN_INTENT_DATA
欄,然後在各列填入專屬資料,為各個意圖提供所有必要資訊資訊。此欄資料會完全附加至意圖,如同您在此欄中定義的意圖。接著,您可以使用getData()
或getDataString()
擷取。 - 將資料 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
),儲存與建議相關的其他資訊。這個資料欄中儲存的資料會放在意圖額外套件的 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 或其他資料格式 (例如 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>
在這個範例中,供應器限制了內容的讀取和寫入權限。藉由在 "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,請一律加入這個屬性。
由於使用者必須造訪設定選單,才能為應用程式啟用搜尋建議,因此如果搜尋是應用程式的重要面向,請考慮如何吸引使用者。例如,您可以在使用者首次啟動應用程式時提供附註,說明如何啟用快速搜尋框的搜尋建議。
管理快速搜尋框建議捷徑
使用者從快速搜尋框選取的建議可以自動變成捷徑。這些建議是由系統從內容供應器複製,以便快速存取建議,無需重新查詢內容供應器。
根據預設,系統會為快速搜尋框擷取的所有建議啟用這項功能,但如果建議資料隨時間改變,您可以要求重新整理捷徑。舉例來說,如果您的建議參照動態資料 (例如聯絡人的在家狀態),請要求向使用者顯示時重新整理建議捷徑。方法是在建議資料表中加入 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_COLUMN_SHORTCUT_ID
」欄中提供SUGGEST_NEVER_MAKE_SHORTCUT
的值,在此情況下,建議一律不會複製到捷徑。只有在您絕對不希望顯示先前複製的建議時,才需要使用此功能。如果您為資料欄提供一般值,則只有在重新整理查詢傳回結果時,建議捷徑才會出現。允許套用預設的快速鍵行為。
請將每個不會變更且可儲存為捷徑的建議
SUGGEST_COLUMN_SHORTCUT_ID
留空。
如果建議都沒有改變,就不需要 SUGGEST_COLUMN_SHORTCUT_ID
欄。
關於「快速搜尋框」建議的排名
當您將應用程式的搜尋建議提供給快速搜尋框後,快速搜尋框的排名會決定向使用者顯示特定查詢建議的方式。這可能取決於有多少應用程式含有該查詢的結果,以及使用者與其他應用程式比較後選取結果的頻率。我們無法保證系統如何排序建議,也無法針對特定查詢顯示應用程式建議。一般來說,提供品質結果會使系統更有機會在顯眼的位置提供應用程式建議,而提供低品質建議的應用程式,也較有可能降低排名,或顯示為不顯示。