Quản lý lối tắt

Sau khi tạo lối tắt, bạn có thể cần quản lý chúng trong suốt vòng đời của ứng dụng của bạn. Ví dụ: bạn có thể muốn tối ưu hoá ứng dụng của mình bằng cách xác định cách thường người dùng hoàn tất các thao tác cụ thể bằng lối tắt của bạn. Trong một trường hợp khác, bạn có thể quyết định vô hiệu hoá lối tắt được ghim để ngăn ứng dụng của bạn thực hiện hành động lỗi thời hoặc bị thiếu. Đối với các lối tắt được tham chiếu trong cuộc trò chuyện, bạn có thể muốn theo dõi việc sử dụng để cung cấp các tín hiệu giúp cải thiện lối tắt.

Trang này mô tả những cách này và một số cách phổ biến khác để quản lý lối tắt.

Hành vi của lối tắt

Các phần sau chứa thông tin chung về hành vi của lối tắt, bao gồm khả năng hiển thị, thứ tự hiển thị và thứ hạng.

Chế độ hiển thị lối tắt

Lối tắt tĩnh và lối tắt động sẽ xuất hiện trong một trình chạy được hỗ trợ hoặc trợ lý khi người dùng thực hiện một cử chỉ hoặc lệnh thoại cụ thể. Bật các trình chạy được hỗ trợ, cử chỉ là thao tác chạm & hãy giữ biểu tượng trình chạy của ứng dụng nhưng cử chỉ có thể khác trên các ứng dụng trình chạy khác. Bằng Google Trợ lý, các lối tắt có thể xuất hiện trong Trợ lý hoặc mở qua một người dùng lệnh thoại.

Lớp LauncherApps cung cấp API để các ứng dụng trình chạy truy cập lối tắt.

Do lối tắt được ghim xuất hiện trong chính trình chạy, nên các lối tắt đó sẽ luôn hiển thị. Lối tắt được ghim chỉ bị xoá khỏi trình chạy trong các trường hợp sau:

  • Người dùng xoá lối tắt.
  • Đã gỡ cài đặt ứng dụng liên kết với lối tắt.
  • Người dùng xoá dữ liệu của ứng dụng bằng cách chuyển đến phần Cài đặt > Ứng dụng và thông báo, chọn ứng dụng, sau đó nhấn vào Bộ nhớ > Xoá bộ nhớ.

Chia sẻ mục tiêu là một tập hợp con gồm các lối tắt động xuất hiện trong hàng chia sẻ trực tiếp của Trang tính chia sẻ của Android.

Ảnh chụp màn hình Trang chia sẻ nội dung trong Android
Hình 1. Trang chia sẻ nội dung Android. Mục tiêu chia sẻ trực tiếp xuất hiện ở hàng đầu tiên, tiếp theo là các ứng dụng được xếp hạng rồi đến danh sách Ứng dụng.

Thứ tự hiển thị lối tắt

Khi trình chạy hiển thị lối tắt của một ứng dụng, các lối tắt đó phải xuất hiện ở phần sau đơn đặt hàng:

  1. Lối tắt tĩnh: lối tắt có phương thức isDeclaredInManifest() trả về true.
  2. Lối tắt động: lối tắt có ShortcutInfo.isDynamic() trả về true.

Trong mỗi loại lối tắt (tĩnh và động), các lối tắt được sắp xếp theo thứ tự tăng thứ hạng theo ShortcutInfo.getRank. Trợ lý Google cũng xem xét thứ hạng lối tắt khi xác định các lối tắt theo ngữ cảnh để hiển thị người dùng.

Thứ hạng là số nguyên không âm, liên tiếp nhau. Các lối tắt tĩnh được xếp hạng từ từ đầu đến cuối theo thứ tự xuất hiện trong tệp shortcuts.xml. Cho quảng cáo động lối tắt, bạn có thể cập nhật hàng xếp hạng các phím tắt hiện có khi gọi updateShortcuts(Context, List)! addDynamicShortcuts(Context, List), pushDynamicShortcut(Context, ShortcutInfoCompat) hoặc setDynamicShortcuts(Context, List).

Thứ tự của các mục tiêu chia sẻ dựa trên nhiều yếu tố, bao gồm cả người dùng cũ lịch sử, lần truy cập gần đây, tần suất gợi ý về thứ hạng, mức sử dụng ứng dụng và mức độ ưu tiên được đặt cho cuộc trò chuyện liên kết với một lối tắt để chia sẻ. Chia sẻ mục tiêu được tạo bằng cách sử dụng API Lối tắt chia sẻ được ưu tiên hơn mục tiêu chia sẻ do ChooserTargetService Tính năng này không còn được dùng trong Android 11. Mục tiêu theo tỷ lệ trên Android 12 trở lên được tạo bởi ChooserTargetService không dùng nữa sẽ không còn xuất hiện trong trang tính chia sẻ.

Hầu hết trình chạy đều hiển thị tối đa 4 phím tắt. Đối với bất kỳ kết hợp nào của lối tắt tĩnh và lối tắt động được xác định, trình chạy sẽ hiển thị một tối đa 2 lối tắt tĩnh và 2 lối tắt động. Ví dụ: nếu bạn xác định bốn lối tắt tĩnh và tạo 3 lối tắt động bằng cách lập trình các lối tắt, trình chạy sẽ hiển thị hai lối tắt tĩnh đầu tiên và hai lối tắt lối tắt động được xếp hạng cao nhất.

Quản lý nhiều ý định và hoạt động

Nếu bạn muốn ứng dụng của mình thực hiện nhiều thao tác khi người dùng kích hoạt một , bạn có thể định cấu hình lối tắt đó để kích hoạt các hoạt động liên tiếp. Bạn có thể thực hiện điều này bằng cách gán nhiều ý định, bắt đầu một hoạt động từ khác hoặc đặt cờ ý định, tuỳ thuộc vào loại lối tắt.

Gán nhiều ý định

Khi tạo khẩu lệnh nhanh bằng ShortcutInfoCompat.Builder, bạn có thể sử dụng setIntents() thay vì setIntent(). Khi gọi setIntents(), bạn có thể khởi chạy nhiều hoạt động trong ứng dụng khi người dùng chọn một lối tắt, đặt tất cả trừ hoạt động cuối cùng trong danh sách vào ngăn xếp quay lại. Nếu sau đó nhấn vào nút quay lại của thiết bị, họ sẽ thấy một hoạt động khác trong ứng dụng của bạn thay vì quay lại trình chạy của thiết bị.

Bắt đầu một hoạt động từ một hoạt động khác

Lối tắt tĩnh không được có cờ ý định tuỳ chỉnh. Ý định đầu tiên của đối tượng tĩnh phím tắt luôn có Intent.FLAG_ACTIVITY_NEW_TASKĐặt Intent.FLAG_ACTIVITY_CLEAR_TASK. Điều này có nghĩa là khi ứng dụng của bạn thì tất cả các hoạt động hiện có trong ứng dụng sẽ bị huỷ bỏ khi một trạng thái tĩnh đã chạy lối tắt. Nếu không muốn hành vi này, bạn có thể sử dụng đàn hồi hoạt động — một hoạt động không hiển thị mà bắt đầu một hoạt động khác trong Activity.onCreate(Bundle) gọi Activity.finish():

  1. Trong tệp AndroidManifest.xml, hãy thêm việc chỉ định thuộc tính android:taskAffinity=" trong hoạt động đàn hồi.
  2. Trong tệp tài nguyên lối tắt, hãy tham chiếu đến hoạt động đàn hồi trong bên trong lối tắt tĩnh.

Để biết thêm thông tin về hoạt động đàn hồi, hãy xem phần Bắt đầu một hoạt động từ một thiết bị khác.

Đặt cờ cho ý định

Bạn có thể xuất bản lối tắt động bằng bất kỳ bộ cờ Intent nào. Bạn nên chỉ định Intent.FLAG_ACTIVITY_CLEAR_TASK cùng với các thuộc tính khác cờ. Hoặc nếu bạn cố bắt đầu một tác vụ khác trong khi ứng dụng đang thì hoạt động mục tiêu có thể không xuất hiện.

Để tìm hiểu thêm về tác vụ và cờ ý định, hãy xem bài viết Tác vụ và ngăn xếp lui.

Cập nhật lối tắt

Biểu tượng trình chạy của mỗi ứng dụng có thể chứa tối đa một số bằng với giá trị được trả về bởi getMaxShortcutCountPerActivity. Không có giới hạn về số lượng các lối tắt được ghim mà một ứng dụng có thể tạo.

Khi lối tắt động được ghim, ngay cả khi nhà xuất bản xoá lối tắt đó dưới dạng một lối tắt lối tắt động, lối tắt được ghim vẫn hiển thị và có thể khởi chạy. Điều này cho phép một ứng dụng có số lượng lối tắt nhiều hơn getMaxShortcutCountPerActivity().

Hãy xem xét ví dụ sau, giả định rằng giá trị được trả về bởi getMaxShortcutCountPerActivity()4:

  1. Một ứng dụng nhắn tin xuất bản 4 lối tắt động, đại diện cho 4 lối tắt phổ biến nhất các cuộc trò chuyện gần đây: c1, c2, c3 và c4.
  2. Người dùng ghim tất cả 4 lối tắt.
  3. Sau đó, người dùng bắt đầu thêm 3 cuộc trò chuyện: c5, c6 và c7. Chiến lược phát hành đĩa đơn ứng dụng của nhà xuất bản xuất bản lại lối tắt động. Lối tắt động mới danh sách là: c4, c5, c6 và c7.

Ứng dụng phải xoá c1, c2 và c3 vì không thể hiển thị quá bốn lối tắt động. Tuy nhiên, c1, c2 và c3 vẫn là các lối tắt được ghim mà người dùng có thể truy cập và khởi chạy.

Sau đó, người dùng có thể truy cập tổng cộng 7 phím tắt liên kết đến các hoạt động trong ứng dụng của nhà xuất bản. Điều này là do tổng số bao gồm tối đa và 3 lối tắt được ghim.

  1. Ứng dụng có thể dùng updateShortcuts(Context, List) để cập nhật bất kỳ 7 phím tắt hiện có. Ví dụ: bạn có thể cập nhật nhóm lối tắt này khi bạn trò chuyện biểu tượng.
  2. Bạn có thể sử dụng addDynamicShortcuts(Context, List) và Phương thức setDynamicShortcuts(Context, List) để cập nhật lối tắt hiện có có cùng mã nhận dạng. Tuy nhiên, bạn không thể sử dụng chúng để cập nhật các biến không động, các lối tắt được ghim, bởi vì hai phương pháp này cố gắng chuyển đổi danh sách lối tắt đến lối tắt động.

Không có giới hạn về số lượng phím tắt có thể đẩy để hiển thị các ứng dụng trợ lý như Trợ lý Google. Sử dụng pushDynamicShortcut() của thư viện Jetpack ShortcutManagerCompat để tạo và cập nhật lối tắt để dùng trên các ứng dụng trợ lý. Ngoài ra, hãy thêm tính năng Tích hợp lối tắt của Google thư viện vào ứng dụng của bạn để giúp các đường liên kết động đủ điều kiện xuất hiện trên Google Trợ lý Google.

Để tìm hiểu thêm về nguyên tắc đối với lối tắt ứng dụng, bao gồm cả cách cập nhật lối tắt, xem Các phương pháp hay nhất cho lối tắt.

Xử lý các thay đổi về ngôn ngữ của hệ thống

Ứng dụng phải cập nhật lối tắt động và được ghim khi nhận được Truyền tin Intent.ACTION_LOCALE_CHANGED cho biết có thay đổi đối với hệ thống ngôn ngữ.

Theo dõi việc sử dụng lối tắt

Để xác định các tình huống mà lối tắt tĩnh và động xuất hiện, trình chạy kiểm tra nhật ký kích hoạt của các lối tắt. Đối với lối tắt tĩnh, bạn có thể theo dõi thời điểm người dùng hoàn tất các hành động cụ thể trong ứng dụng bằng cách gọi phương thức reportShortcutUsed() rồi truyền vào đó mã nhận dạng của khi một trong các sự kiện sau xảy ra:

  • Người dùng chọn lối tắt có ID được cung cấp.
  • Trong ứng dụng, người dùng tự hoàn tất thao tác tương ứng với cùng một phím tắt.

Ứng dụng của bạn theo dõi việc sử dụng lối tắt động bằng cách gọi hàm pushDynamicShortcut() và truyền vào đó mã nhận dạng của lối tắt khi một sự kiện liên quan xảy ra. Đẩy việc sử dụng lối tắt động bằng phương pháp này cho phép các ứng dụng trợ lý như Trợ lý Google đề xuất khẩu lệnh nhanh phù hợp cho người dùng. Vì phương thức pushDynamicShortcut() báo cáo việc sử dụng khi được gọi nên bạn đừng gọi phương thức reportShortcutUsed() cho các lối tắt tương tự.

Đối với các phím tắt liên quan đến cuộc trò chuyện, bạn cần phải theo dõi mức sử dụng phím tắt đi và tin nhắn đến. Để biết thông tin chi tiết, hãy xem các phương pháp hay nhất dành cho người và cuộc trò chuyện.

Vô hiệu hoá lối tắt

Vì ứng dụng của bạn và người dùng ứng dụng có thể ghim lối tắt vào trình chạy của thiết bị nên ứng dụng có thể các lối tắt được ghim này có thể hướng người dùng đến các thao tác trong ứng dụng của bạn đã lỗi thời hoặc không còn tồn tại. Để xử lý tình huống này, bạn có thể vô hiệu hoá các lối tắt mà bạn không muốn người dùng chọn bằng cách gọi disableShortcuts để xoá các lối tắt đã chỉ định khỏi tệp tĩnh và danh sách lối tắt động, đồng thời vô hiệu hoá các bản sao được ghim của những lối tắt này. Bạn cũng có thể sử dụng phiên bản nạp chồng của phương thức này chấp nhận một CharSequence dưới dạng thông báo lỗi tuỳ chỉnh. Sau đó, thông báo lỗi đó sẽ xuất hiện khi người dùng cố gắng chạy bất kỳ lối tắt đã vô hiệu hoá nào.

Giới hạn số lượng yêu cầu

Khi sử dụng setDynamicShortcuts(), addDynamicShortcuts() hoặc updateShortcuts(), bạn chỉ có thể gọi các phương thức này là số lần cụ thể trong ứng dụng ở chế độ nền — một ứng dụng không có hoạt động hoặc trên nền trước. Giới hạn về số lần cụ thể mà bạn có thể gọi các phương thức này được gọi là giới hạn tốc độ. Tính năng này ngăn ShortcutManagerCompat khỏi việc sử dụng quá mức tài nguyên thiết bị.

Khi giới hạn số lượng yêu cầu đang hoạt động, isRateLimitingActive() sẽ trả về giá trị true. Tuy nhiên, giới hạn số lượng yêu cầu sẽ được đặt lại trong một số sự kiện nhất định, do đó, ngay cả các ứng dụng nền có thể gọi các phương thức ShortcutManager cho đến khi đạt lại giới hạn tốc độ. Các bao gồm các sự kiện sau:

  • Ứng dụng chạy ở nền trước.
  • Ngôn ngữ bản địa hoá của hệ thống thay đổi.
  • Người dùng thực hiện thao tác trả lời cùng dòng trên một thông báo.

Nếu gặp phải tình trạng giới hạn số lượng yêu cầu trong quá trình phát triển hoặc thử nghiệm, bạn có thể chọn Tuỳ chọn cho nhà phát triển > Đặt lại giới hạn tốc độ trong ShortcutManager trên thiết bị cài đặt hoặc bạn có thể nhập lệnh sau trong adb:

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

Sao lưu và khôi phục

Bạn có thể cho phép người dùng thực hiện các hoạt động sao lưu và khôi phục trên ứng dụng của mình khi thay đổi thiết bị bằng cách bao gồm android:allowBackup="true" phân bổ chỉ định trong tệp kê khai của ứng dụng. Nếu bạn hỗ trợ tính năng sao lưu và khôi phục, hãy giữ nguyên cần lưu ý những điểm sau đây liên quan đến lối tắt ứng dụng:

  • Lối tắt tĩnh được tự động xuất bản lại, nhưng chỉ sau người dùng cài đặt lại ứng dụng của bạn trên một thiết bị mới.
  • Lối tắt động không được sao lưu nên hãy thêm logic vào ứng dụng để xuất bản lại chúng khi người dùng mở ứng dụng của bạn trên thiết bị mới.
  • Các lối tắt đã ghim sẽ tự động được khôi phục vào trình chạy của thiết bị, nhưng hệ thống không sao lưu các biểu tượng liên kết với lối tắt được ghim. Do đó, hãy lưu lối tắt bạn đã ghim hình ảnh trong ứng dụng để bạn dễ dàng khôi phục chúng một thiết bị mới.

Đoạn mã sau đây cho biết cách tốt nhất để khôi phục động của ứng dụng lối tắt và cách kiểm tra xem lối tắt được ghim của ứng dụng có được giữ nguyên hay không:

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.
            }
        }
    }
    // ...
}