管理捷徑

建立捷徑後,可能需要在整個生命週期內管理這些捷徑 舉例來說,您可以決定 通常使用者會使用捷徑完成特定動作。在其他情況下 建議您停用固定捷徑 或是執行過時或遺漏的動作若是以下情況所參照的快速鍵,請參閱: 建議您追蹤使用情況 藉此提供可改善對話品質的信號 捷徑排名。

本頁將說明下列 和幾種其他管理平台的常見方式 快速指令。

捷徑行為

以下各節包含有關捷徑行為的一般資訊。 包括瀏覽權限、顯示順序和排名

捷徑瀏覽權限

靜態捷徑和動態捷徑會顯示在支援的啟動器中,或是 就能啟動 Google 助理。啟用 這個手勢是指觸控與按住應用程式的啟動器圖示 但在其他啟動器應用程式中的手勢可能有所不同。使用 Google Google 助理、快速指令可在 Google 助理中顯示,或從使用者啟動 語音指令

LauncherApps 類別提供讓啟動器應用程式存取的 API 快速指令。

由於固定捷徑會顯示在啟動器中,因此固定捷徑一律會顯示。 只有在下列情況中,系統才會將固定捷徑從啟動器中移除:

  • 使用者移除捷徑。
  • 已解除安裝與捷徑相關聯的應用程式。
  • 使用者前往「設定」> 清除應用程式的資料,應用程式與通知, 選取應用程式,然後輕觸「儲存空間」清除儲存空間。

共用目標 是動態捷徑的子集,會顯示在 Android 分享工作表。

Android Sharesheet 的螢幕截圖
圖 1:Android Sharesheet。直接分享目標會顯示在第一列,依序顯示排名的應用程式和應用程式清單。

捷徑顯示順序

啟動器顯示應用程式捷徑時,必須顯示在下列位置: 順序:

  1. 靜態捷徑:具有 isDeclaredInManifest() 方法的捷徑 會傳回 true
  2. 動態捷徑ShortcutInfo.isDynamic() 的捷徑 方法會傳回 true

在每種捷徑類型 (靜態和動態) 中,捷徑會按照 根據ShortcutInfo.getRank而提升排名。Google 助理 系統在決定適合顯示的關聯捷徑時,也會將捷徑排名納入考量 使用者。

排名是非負的連續整數。靜態捷徑的排名依據 按在 shortcuts.xml 檔案中顯示順序排列。動態 捷徑,你可以在呼叫時更新現有捷徑的排名 updateShortcuts(Context, List)addDynamicShortcuts(Context, List), pushDynamicShortcut(Context, ShortcutInfoCompat),或 setDynamicShortcuts(Context, List)

共用指定目標的順序受多種因素影響,包括過去的使用者 歷史記錄、回訪率、頻率 排名提示、 應用程式使用情況,以及針對與惡意程式碼相關聯的對話所設定的優先順序 分享捷徑共用使用 Share Shortcuts API (分享捷徑 API) 優先順序高於 ChooserTargetService敬上 (Android 11 已淘汰)。Android 12 以上版本的共用目標 已淘汰的 ChooserTargetService 所產生的 分享工作表。

大多數啟動器最多可顯示四個捷徑。對於 已定義的靜態捷徑和動態捷徑時,啟動器會顯示 最多兩個靜態捷徑和兩個動態捷徑。舉例來說,如果您在 定義四個靜態捷徑,並透過程式輔助方式建立三個動態 啟動器會顯示前兩個靜態捷徑 有度高的動態捷徑。

管理多個意圖和活動

如果您希望應用程式在使用者啟動應用程式時執行多項作業 快速鍵,您可以設定觸發連續的活動。你可以 為此,請指派多個意圖,並讓每項活動從 或是根據捷徑類型設定意圖旗標

指派多個意圖

使用 ShortcutInfoCompat.Builder 建立捷徑時,您可以使用 setIntents(),而不是 setIntent()。致電 setIntents() 後,你就會看見 使用者選取捷徑時,即可在應用程式中啟動多項活動。 除了最後一個活動之外,請將最後一個活動放在返回堆疊的清單中。如果 使用者然後輕觸裝置的返回按鈕,即可查看您的應用程式中的其他活動。 而不是返回裝置的啟動器

開始其他活動

靜態捷徑不得包含自訂意圖旗標。使用靜態值時 快速鍵一律為 Intent.FLAG_ACTIVITY_NEW_TASK設定Intent.FLAG_ACTIVITY_CLEAR_TASK。這意味著 應用程式中的所有現有活動都會刪除 快速鍵已啟用。如果您不希望此行為,可以使用 Trampoline 活動 — 啟動其他活動的隱形活動,範圍為 呼叫 Activity.finish() Activity.onCreate(Bundle)

  1. AndroidManifest.xml 檔案中,加入屬性指派設定 android:taskAffinity= 吋進行追蹤
  2. 在捷徑資源檔案中,參照 靜態捷徑中的意圖

如要進一步瞭解 Trampoline 活動,請參閱開始一項活動 設定容器

設定意圖旗標

您可以使用任何一組 Intent 旗標發布動態捷徑。 建議您在指定另一個參數時一併指定 Intent.FLAG_ACTIVITY_CLEAR_TASK 旗標否則,如果您在應用程式 跑步時可能不會出現目標活動。

如要進一步瞭解工作和意圖旗標,請參閱工作和返回堆疊

更新捷徑

每個應用程式的啟動器圖示最多可包含一些靜態和動態元素, 相當於 getMaxShortcutCountPerActivity。查詢的數量上限沒有 應用程式可建立的固定捷徑

將動態捷徑固定時,即使發布商將動態捷徑移除, 動態捷徑後,固定的捷徑仍會顯示並啟動。這樣一來, 單一應用程式的捷徑數目超過 getMaxShortcutCountPerActivity()

請參考以下範例,假設所傳回的值是由 getMaxShortcutCountPerActivity()4

  1. 即時通訊應用程式會發布四個動態捷徑,代表 最近的對話:c1、c2、c3 和 c4。
  2. 使用者固定這四個捷徑。
  3. 後來,使用者又開啟了三個其他對話:c5、c6 和 c7。 發布商應用程式會重新發布動態捷徑。新的動態捷徑 列出:c4、c5、c6 和 c7

應用程式無法顯示超過 4 個,因此必須移除 c1、c2 和 c3 動態捷徑不過,c1、c2 和 c3 仍是固定捷徑, 使用者可以存取及啟動

使用者隨即可以使用總計 7 個捷徑,這些捷徑連至 中的活動 發布商應用程式這是因為總數包含 以及三個固定捷徑

  1. 應用程式可以使用 updateShortcuts(Context, List) 更新 現有七個捷徑例如更新這組快速鍵 通訊對象對話時圖示就會改變
  2. 您可以使用 addDynamicShortcuts(Context, List) 和 更新現有捷徑的 setDynamicShortcuts(Context, List) 種方法 具有相同的 ID。但無法用於更新非動態、 固定捷徑,因為這兩種方法都會嘗試 動態捷徑。

可推送顯示的捷徑數目沒有上限 支援助理應用程式,例如 Google 助理。使用 pushDynamicShortcut() ShortcutManagerCompat Jetpack 程式庫的方法,用於建立及更新 。此外,請將 Google 捷徑整合功能 加入應用程式庫,讓動態連結有資格顯示在 Google 上 「Google 助理」。

如要進一步瞭解應用程式捷徑的相關指南 (包括更新捷徑), 請參閱「捷徑的最佳做法」。

處理系統語言代碼變更

應用程式收到以下要求時,必須更新動態和固定的捷徑 Intent.ACTION_LOCALE_CHANGED 廣播表示系統變更 語言代碼。

追蹤捷徑使用情形

如要判斷靜態和動態捷徑的顯示情況, 啟動器會檢查捷徑的啟用記錄。如果是靜態捷徑 您可以追蹤使用者在應用程式中完成特定動作的時間 呼叫 reportShortcutUsed() 方法,並向該方法傳遞 觸發下列任一事件的捷徑:

  • 使用者選取含有指定 ID 的捷徑。
  • 使用者會在應用程式中手動完成與 捷徑

您的應用程式會呼叫 pushDynamicShortcut() 方法,並在發生事件時傳送捷徑的 ID 就會發生相關事件如果搭配這個方法推送動態捷徑,您可以 Google 助理等小幫手應用程式,會提供相關的快速指令建議給使用者。 pushDynamicShortcut() 方法會在呼叫時回報使用情形,因此請勿呼叫 用於相同捷徑的 reportShortcutUsed() 方法。

與對話相關的快速指令,請務必追蹤外送的使用情形 和收到的訊息詳情請參閱人體和企業適用的最佳做法 可使用對話專用的 PaLM

停用捷徑

您的應用程式及其使用者可將捷徑固定至裝置啟動器, 這些固定的捷徑可將使用者導向應用程式中的動作 。如要因應這種情況,您可以 如果不想讓使用者選取特定快速鍵,您可以呼叫 disableShortcuts:從靜態中移除指定的快速指令 和動態捷徑清單,並停用這些捷徑的固定副本。個人中心 此方法的超載版本,可接受 CharSequence 做為自訂錯誤訊息。接著,系統會顯示這則錯誤訊息 當使用者嘗試啟動任何已停用的捷徑時。

頻率限制

使用 setDynamicShortcuts(), addDynamicShortcuts() 時,或 updateShortcuts() 方法,您可能只能呼叫這些方法 「背景應用程式」中特定幾次行為,也就是不含活動的應用程式;或是 服務。對於可執行特定操作的次數上限 呼叫這些方法稱為頻率限制這項功能 ShortcutManagerCompat 來自過度耗用的裝置資源。

啟用頻率限制時,isRateLimitingActive() 會傳回 true。 不過,在某些事件 (例如背景應用程式) 中,頻率限制會重設 可以呼叫 ShortcutManager 方法,直到頻率限制再次達到上限為止。這些 事件包括:

  • 應用程式移至前景。
  • 系統語言代碼有所變更。
  • 使用者在通知中執行內嵌回覆動作。

如果您在開發或測試期間遇到頻率限制,您可以選取 開發人員選項 >從裝置的 設定,或是在 adb 中輸入下列指令:

$ adb shell cmd shortcut reset-throttling [ --user your-user-id ]

備份與還原

您可以讓使用者在下列情況中對應用程式執行備份和還原作業: 加入android:allowBackup="true屬性 。如果支援備份和還原功能 應用程式捷徑的注意事項:

  • 靜態捷徑會自動重新發布,但使用者必須等待使用者之後才會重新發布 有人在新裝置上重新安裝您的應用程式。
  • 動態捷徑無法備份,因此在應用程式中加入重新發布的邏輯 當使用者在新裝置上開啟應用程式時,就會發現這個廣告。
  • 固定捷徑會自動還原到裝置的啟動器,但是 系統不會備份與固定捷徑相關聯的圖示。因此,儲存 已固定的捷徑並輕鬆還原 存取新裝置。

下列程式碼片段說明如何還原應用程式的動態內容 快速鍵,以及如何檢查應用程式的固定捷徑是否保持不變:

Kotlin

class MyMainActivity : Activity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        if (ShortcutManagerCompat.dynamicShortcuts.size == 0) {
            // Application restored. Re-publish dynamic shortcuts.
            if (ShortcutManagerCompat.pinnedShortcuts.size > 0) {
                // Pinned shortcuts are restored. Use updateShortcuts() to make
                // sure they contain up-to-date information.
            }

        }
    }
    // ...
}

Java

public class MainActivity extends Activity {
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        if (ShortcutManagerCompat.getDynamicShortcuts().size() == 0) {
            // Application restored. Re-publish dynamic shortcuts.
            if (ShortcutManagerCompat.getPinnedShortcuts().size() > 0) {
                // Pinned shortcuts are restored. Use pdateShortcuts() to make
                // sure they contain up-to-date information.
            }
        }
    }
    // ...
}