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.
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:
- Lối tắt tĩnh: lối tắt có phương thức
isDeclaredInManifest()
trả vềtrue
. - 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
và
Đặ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)
mà gọi Activity.finish()
:
- Trong tệp
AndroidManifest.xml
, hãy thêm việc chỉ định thuộc tínhandroid:taskAffinity=
" trong hoạt động đàn hồi. - 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()
là 4
:
- 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.
- Người dùng ghim tất cả 4 lối tắt.
- 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.
- Ứ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. - Bạn có thể sử dụng
addDynamicShortcuts(Context, List)
và Phương thứcsetDynamicShortcuts(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. } } } // ... }