Bạn nên sử dụng các mục tiêu Chia sẻ trực tiếp để giúp người dùng các ứng dụng khác chia sẻ URL, hình ảnh hoặc các loại dữ liệu khác với ứng dụng của bạn dễ dàng và nhanh chóng hơn. Tính năng Chia sẻ trực tiếp hoạt động bằng cách hiển thị người liên hệ từ các ứng dụng nhắn tin và ứng dụng mạng xã hội ngay trên Trang chia sẻ nội dung của Android mà không cần người dùng chọn ứng dụng rồi tìm kiếm người liên hệ đó.
ShortcutManagerCompat
là một API AndroidX cung cấp lối tắt Chia sẻ và có khả năng tương thích ngược với API ChooserTargetService
đã ngừng hoạt động. Đây là cách ưu tiên để phát hành cả lối tắt Chia sẻ và ChooserTargets
. Để biết hướng dẫn, hãy xem phần Sử dụng AndroidX để cung cấp cả lối tắt Chia sẻ và Chọn mục tiêu trên trang này.
Xuất bản mục tiêu Chia sẻ trực tiếp
Hàng Chia sẻ trực tiếp trên Trang chia sẻ chỉ hiển thị các lối tắt động do API Chia sẻ lối tắt cung cấp. Hoàn tất các bước sau để xuất bản các mục tiêu Chia sẻ trực tiếp.
Trong tệp tài nguyên XML của ứng dụng, hãy khai báo các phần tử
share-target
.<shortcuts xmlns:android="http://schemas.android.com/apk/res/android"> <share-target android:targetClass="com.example.android.sharingshortcuts.SendMessageActivity"> <data android:mimeType="text/plain" /> <category android:name="com.example.android.sharingshortcuts.category.TEXT_SHARE_TARGET" /> </share-target> </shortcuts>
Khi ứng dụng của bạn khởi chạy, hãy dùng
setDynamicShortcuts
để sắp xếp các lối tắt động theo mức độ quan trọng.Chỉ số càng thấp thì mức độ quan trọng càng cao. Nếu bạn đang tạo một ứng dụng liên lạc, thì đó có thể là các cuộc trò chuyện hàng đầu được sắp xếp theo số ngày gần đây khi chúng xuất hiện trong ứng dụng của bạn. Không xuất bản các lối tắt đã lỗi thời; một cuộc trò chuyện không có hoạt động của người dùng trong 30 ngày qua sẽ bị coi là lỗi thời.
Kotlin
ShortcutManagerCompat.setDynamicShortcuts(myContext, listOf(shortcut1, shortcut2, ..))
Java
List<ShortcutInfoCompat> shortcuts = new ArrayList<>(); shortcuts.add(shortcut1); shortcuts.add(shortcut2); ... ShortcutManagerCompat.setDynamicShortcuts(myContext, shortcuts);
Nếu bạn đang phát triển một ứng dụng liên lạc, hãy báo cáo việc sử dụng lối tắt thông qua
pushDynamicShortcut
ngay lập tức mỗi khi người dùng nhận hoặc gửi tin nhắn cho một người liên hệ. Hãy xem phần Báo cáo việc sử dụng lối tắt cho các ứng dụng giao tiếp trên trang này để biết thêm thông tin. Ví dụ: báo cáo mức sử dụng các thông báo do người dùng gửi bằng cách chỉ định các liên kết chức năng trong lối tắt thông quaShortcutInfoCompat.Builder#addCapabilityBinding
với tính năngactions.intent.SEND_MESSAGE
.Kotlin
val shortcutInfo = ShortcutInfoCompat.Builder(myContext, staticConversationIdentifier) ... .setShortLabel(firstName) .setLongLabel(fullName) .setCategories(matchedCategories) .setLongLived(true) .addCapabilityBinding("actions.intent.SEND_MESSAGE").build() ShortcutManagerCompat.pushDynamicShortcut(myContext, shortcutInfo)
Java
ShortcutInfoCompat shortcutInfo = new ShortcutInfoCompat.Builder(myContext, staticConversationIdentifier) ... .setShortLabel(firstName) .setLongLabel(fullName) .setCategories(matchedCategories) .setLongLived(true) .addCapabilityBinding("actions.intent.SEND_MESSAGE") .build(); ShortcutManagerCompat.pushDynamicShortcut(myContext, shortcutInfo);
Nếu người dùng xoá một mục liên hệ, hãy sử dụng
removeLongLivedShortcut
. Đây là cách ưu tiên để xoá lối tắt bất kể dịch vụ hệ thống có lưu lối tắt đó vào bộ nhớ đệm hay không. Đoạn mã sau đây cho thấy ví dụ về cách thực hiện việc này.Kotlin
val deleteShortcutId = "..." ShortcutManagerCompat.removeLongLivedShortcuts(myContext, listOf(deleteShortcutId))
Java
String deleteShortcutId = "..."; ShortcutManagerCompat.removeLongLivedShortcuts( myContext, Arrays.asList(deleteShortcutId));
Cải thiện thứ hạng của mục tiêu Chia sẻ trực tiếp
Trang chia sẻ nội dung trên Android cho thấy một số lượng mục tiêu chia sẻ trực tiếp cố định. Các đề xuất này được sắp xếp theo thứ hạng. Bạn có thể cải thiện thứ hạng của lối tắt bằng cách làm như sau:
- Đảm bảo tất cả
shortcutIds
là duy nhất và không bao giờ được sử dụng lại cho các mục tiêu khác nhau. - Đảm bảo lối tắt tồn tại trong thời gian dài bằng cách gọi
setLongLived(true)
. - Đối với các khẩu lệnh nhanh liên quan đến cuộc trò chuyện, hãy báo cáo mức sử dụng khẩu lệnh nhanh cho thư đi và thư đến bằng cách xuất bản lại các khẩu lệnh nhanh tương ứng thông qua
ShortcutManagerCompat.pushDynamicShortcut
. Xem bài viết Báo cáo mức sử dụng lối tắt cho ứng dụng liên lạc trên trang này để biết thông tin chi tiết. - Tránh cung cấp các mục tiêu Chia sẻ trực tiếp không liên quan hoặc đã lỗi thời – ví dụ: các mục liên hệ mà người dùng không nhắn tin trong 30 ngày qua.
- Đối với các ứng dụng SMS, hãy tránh cung cấp lối tắt cho các mã ngắn hoặc cuộc trò chuyện được xác định là có khả năng là tin nhắn rác. Người dùng rất ít có khả năng chia sẻ với các cuộc trò chuyện đó.
- Gọi
setCategories()
để liên kết lối tắt với các thuộc tínhmimeType
thích hợp. Ví dụ: đối với một ứng dụng SMS, nếu người liên hệ không bật RCS (Dịch vụ giao tiếp đa dạng) hoặc MMS, bạn sẽ không liên kết lối tắt tương ứng với các loại MIME không phải dạng văn bản, chẳng hạn nhưimage/*
vàvideo/*
. - Đối với một cuộc trò chuyện cụ thể, sau khi đẩy một lối tắt động và báo cáo mức sử dụng, bạn không nên thay đổi mã lối tắt. Điều này đảm bảo việc giữ lại dữ liệu sử dụng để xếp hạng.
Nếu người dùng nhấn vào bất kỳ mục tiêu Chia sẻ trực tiếp nào, ứng dụng của bạn phải đưa họ đến một giao diện người dùng nơi họ có thể thực hiện một thao tác trực tiếp trên đối tượng của mục tiêu. Không hiển thị cho người dùng giao diện người dùng phân định và không đặt họ vào giao diện người dùng không liên quan đến mục tiêu đã nhấn. Ví dụ: trong một ứng dụng nhắn tin, khi nhấn vào mục tiêu Chia sẻ trực tiếp, người dùng sẽ được chuyển đến chế độ xem cuộc trò chuyện với người mà họ đã chọn. Bàn phím sẽ hiển thị và thông báo được điền sẵn bằng dữ liệu được chia sẻ.
API lối tắt chia sẻ
Kể từ Android 10 (API cấp 29), ShortcutInfo.Builder
đã thêm các phương thức và tính năng nâng cao cung cấp thêm thông tin về mục tiêu chia sẻ:
setCategories()
- Kể từ Android 10, các danh mục cũng được dùng để lọc lối tắt có thể xử lý ý định hoặc thao tác chia sẻ. Hãy xem bài viết Khai báo mục tiêu chia sẻ để biết thông tin chi tiết. Trường này là bắt buộc để các lối tắt dùng làm mục tiêu chia sẻ.
setLongLived()
Chỉ định xem khẩu lệnh nhanh có hợp lệ hay không khi đã bị ứng dụng huỷ phát hành hoặc ẩn (dưới dạng lối tắt động hoặc được ghim). Nếu lối tắt tồn tại trong thời gian dài, nhiều dịch vụ hệ thống có thể lưu lối tắt đó vào bộ nhớ đệm ngay cả khi lối tắt đó không được xuất bản dưới dạng lối tắt động.
Việc tạo thêm lối tắt trong thời gian dài có thể cải thiện thứ hạng. Hãy xem phần Có được thứ hạng tốt nhất để biết thông tin chi tiết.
setShortLabel()
,setLongLabel()
Khi phát hành khẩu lệnh nhanh cho một cá nhân, vui lòng thêm tên đầy đủ của họ vào
setLongLabel()
và mọi tên ngắn, chẳng hạn như biệt hiệu hoặc tên trongsetShortLabel()
.
Hãy xem ví dụ về trường hợp xuất bản khẩu lệnh nhanh cho thao tác chia sẻ trên GitHub.
Cung cấp hình ảnh lối tắt
Để tạo Lối tắt chia sẻ, bạn cần thêm một hình ảnh qua setIcon()
.
Lối tắt để chia sẻ có thể xuất hiện trên các nền tảng hệ thống và có thể được thiết kế lại.
Ngoài ra, một số thiết bị chạy Android phiên bản 7, 8 hoặc 9 (API cấp 25, 26, 27 và 28) có thể hiển thị các biểu tượng chỉ bitmap mà không có nền, điều này làm giảm đáng kể độ tương phản. Để đảm bảo lối tắt có giao diện như mong đợi, hãy cung cấp bitmap thích ứng bằng cách sử dụng IconCompat.createWithAdaptiveBitmap()
.
Đảm bảo bitmap thích ứng tuân theo cùng các nguyên tắc và kích thước được thiết lập cho biểu tượng thích ứng. Cách phổ biến nhất để thực hiện việc này là mở rộng bitmap hình vuông dự định thành 72x72 dp và căn giữa trong canvas trong suốt 108x108 dp. Nếu biểu tượng của bạn có các vùng trong suốt, bạn cần đưa vào màu nền; nếu không, các vùng trong suốt sẽ xuất hiện màu đen.
Đừng cung cấp hình ảnh được che khuất thành một hình dạng cụ thể. Ví dụ: trước Android 10 (API cấp 29), chúng tôi thường cung cấp hình đại diện của người dùng cho các ChooserTarget
Chia sẻ trực tiếp được che bằng một vòng tròn. Trang chia sẻ nội dung của Android và các nền tảng khác trong hệ thống trong Android 10 nay đã tạo hình và hình ảnh lối tắt giao diện.
Phương thức ưu tiên để cung cấp lối tắt Chia sẻ (thông qua ShortcutManagerCompat
) sẽ tự động định hình các đối tượng ChooserTarget
Chia sẻ trực tiếp tương thích thành các vòng kết nối cho bạn.
Khai báo mục tiêu chia sẻ
Bạn phải khai báo các mục tiêu chia sẻ trong tệp tài nguyên của ứng dụng, tương tự như định nghĩa lối tắt tĩnh. Thêm các định nghĩa về mục tiêu chia sẻ bên trong thành phần gốc <shortcuts>
trong tệp tài nguyên, cùng với các định nghĩa lối tắt tĩnh khác. Mỗi phần tử <share-targets>
chứa thông tin về loại dữ liệu được chia sẻ, danh mục trùng khớp và lớp mục tiêu sẽ xử lý ý định chia sẻ. Mã XML sẽ có dạng như sau:
<shortcuts xmlns:android="http://schemas.android.com/apk/res/android"> <share-target android:targetClass="com.example.android.sharingshortcuts.SendMessageActivity"> <data android:mimeType="text/plain" /> <category android:name="com.example.android.sharingshortcuts.category.TEXT_SHARE_TARGET" /> </share-target> </shortcuts>
Phần tử dữ liệu trong mục tiêu chia sẻ tương tự như quy cách dữ liệu trong bộ lọc ý định. Mỗi mục tiêu chia sẻ có thể có nhiều danh mục. Các danh mục này chỉ được dùng để so khớp các lối tắt đã phát hành của ứng dụng với định nghĩa mục tiêu chia sẻ. Danh mục có thể có bất kỳ giá trị nào do ứng dụng xác định tuỳ ý.
Trong trường hợp người dùng chọn lối tắt chia sẻ trong Trang chia sẻ nội dung Android khớp với ví dụ về chia sẻ mục tiêu ở trên, ứng dụng sẽ nhận được ý định chia sẻ sau:
Action: Intent.ACTION_SEND ComponentName: {com.example.android.sharingshortcuts / com.example.android.sharingshortcuts.SendMessageActivity} Data: Uri to the shared content EXTRA_SHORTCUT_ID: <ID of the selected shortcut>
Nếu người dùng mở mục tiêu chia sẻ qua lối tắt trình chạy, thì ứng dụng sẽ nhận được ý định đã được tạo khi thêm lối tắt chia sẻ vào ShortcutManagerCompat.
Vì đó là một ý định khác nên Intent.EXTRA_SHORTCUT_ID
sẽ không có sẵn và bạn sẽ phải truyền mã nhận dạng theo cách thủ công nếu cần.
Báo cáo việc sử dụng lối tắt cho ứng dụng liên lạc
Nếu đang phát triển một ứng dụng liên lạc, bạn có thể cải thiện thứ hạng trong Trang chia sẻ nội dung Android bằng cách báo cáo mức sử dụng cho cả tin nhắn đi và tin nhắn đến.
Để thực hiện việc này, hãy đăng lại lối tắt cuộc trò chuyện đại diện cho người liên hệ thông qua ShortcutManagerCompat.pushDynamicShortcut
.
Việc sử dụng lối tắt và các liên kết chức năng tương thích ngược với Android 5.0 (API 21).
Báo cáo mức sử dụng lối tắt cho tin nhắn đi
Hoạt động báo cáo về việc sử dụng các thông báo do người dùng gửi có chức năng tương tự như việc nhấp vào nút "gửi" sau khi tạo thông báo.
Để kích hoạt tính năng báo cáo mức sử dụng, hãy chỉ định các liên kết chức năng trong lối tắt thông qua ShortcutInfoCompat.Builder#addCapabilityBinding
với tính năng actions.intent.SEND_MESSAGE
.
Kotlin
val shortcutInfo = ShortcutInfoCompat.Builder(myContext, staticConversationIdentifier) ... .setShortLabel(firstName) .setLongLabel(fullName) .setCategories(matchedCategories) .setLongLived(true) .addCapabilityBinding("actions.intent.SEND_MESSAGE").build() ShortcutManagerCompat.pushDynamicShortcut(myContext, shortcutInfo)
Java
ShortcutInfoCompat shortcutInfo = new ShortcutInfoCompat.Builder(myContext, staticConversationIdentifier) ... .setShortLabel(firstName) .setLongLabel(fullName) .setCategories(matchedCategories) .setLongLived(true) .addCapabilityBinding("actions.intent.SEND_MESSAGE") .build(); ShortcutManagerCompat.pushDynamicShortcut(myContext, shortcutInfo);
Nếu tin nhắn đi là dành cho cuộc trò chuyện nhóm, bạn cũng phải thêm giá trị thông số Audience
vì loại recipient
được liên kết với tính năng này.
Kotlin
val shortcutInfo = ShortcutInfoCompat.Builder(myContext, staticConversationIdentifier) ... .setShortLabel(groupShortTitle) .setLongLabel(groupLongTitle) .setCategories(matchedCategories) .setLongLived(true) .addCapabilityBinding("actions.intent.SEND_MESSAGE", "message.recipient.@type", listOf("Audience")).build() ShortcutManagerCompat.pushDynamicShortcut(myContext, shortcutInfo)
Java
ShortcutInfoCompat shortcutInfo = new ShortcutInfoCompat.Builder(myContext, staticConversationIdentifier) ... .setShortLabel(groupShortTitle) .setLongLabel(groupLongTitle) .setCategories(matchedCategories) .setLongLived(true) .addCapabilityBinding("actions.intent.SEND_MESSAGE", "message.recipient.@type", Arrays.asList("Audience")) .build(); ShortcutManagerCompat.pushDynamicShortcut(myContext, shortcutInfo);
Báo cáo việc sử dụng lối tắt cho tin nhắn đến
Để kích hoạt tính năng báo cáo mức sử dụng khi người dùng nhận được tin nhắn chẳng hạn như tin nhắn SMS, tin nhắn trò chuyện, email hoặc thông báo, bạn phải chỉ định thêm các liên kết chức năng trong lối tắt thông qua ShortcutInfoCompat.Builder#addCapabilityBinding
bằng tính năng actions.intent.RECEIVE_MESSAGE
.
Kotlin
val shortcutInfo = ShortcutInfoCompat.Builder(myContext, staticConversationIdentifier) ... .setShortLabel(firstName) .setLongLabel(fullName) .setCategories(matchedCategories) .setLongLived(true) .addCapabilityBinding("actions.intent.RECEIVE_MESSAGE").build() ShortcutManagerCompat.pushDynamicShortcut(myContext, shortcutInfo)
Java
ShortcutInfoCompat shortcutInfo = new ShortcutInfoCompat.Builder(myContext, staticConversationIdentifier) ... .setShortLabel(firstName) .setLongLabel(fullName) .setCategories(matchedCategories) .setLongLived(true) .addCapabilityBinding("actions.intent.RECEIVE_MESSAGE") .build(); ShortcutManagerCompat.pushDynamicShortcut(myContext, shortcutInfo);
Nếu tin nhắn đến là từ cuộc trò chuyện nhóm, bạn cũng phải thêm giá trị thông số Audience
vì loại sender
được liên kết với tính năng này.
Kotlin
val shortcutInfo = ShortcutInfoCompat.Builder(myContext, staticConversationIdentifier) ... .setShortLabel(groupShortTitle) .setLongLabel(groupLongTitle) .setCategories(matchedCategories) .setLongLived(true) .addCapabilityBinding("actions.intent.RECEIVE_MESSAGE", "message.sender.@type", listOf("Audience")).build() ShortcutManagerCompat.pushDynamicShortcut(myContext, shortcutInfo)
Java
ShortcutInfoCompat shortcutInfo = new ShortcutInfoCompat.Builder(myContext, staticConversationIdentifier) ... .setShortLabel(groupShortTitle) .setLongLabel(groupLongTitle) .setCategories(matchedCategories) .setLongLived(true) .addCapabilityBinding("actions.intent.RECEIVE_MESSAGE", "message.sender.@type", Arrays.asList("Audience")) .build(); ShortcutManagerCompat.pushDynamicShortcut(myContext, shortcutInfo);
Sử dụng AndroidX để cung cấp cả lối tắt Chia sẻ và SelectrTargets
Để có thể hoạt động với thư viện tương thích AndroidX, tệp kê khai của ứng dụng phải chứa tập hợp meta-data chooser-target-service và intent-filters. Xem API Chia sẻ trực tiếp ChooserTargetService
hiện tại.
Dịch vụ này đã được khai báo trong thư viện tương thích nên người dùng không cần khai báo dịch vụ trong tệp kê khai của ứng dụng. Tuy nhiên, đường liên kết từ hoạt động chia sẻ đến dịch vụ phải được xem là nhà cung cấp mục tiêu của trình chọn.
Trong ví dụ sau, cách triển khai ChooserTargetService
là androidx.core.content.pm.ChooserTargetServiceCompat
, đã được xác định trong AndroidX:
<activity android:name=".SendMessageActivity" android:label="@string/app_name" android:theme="@style/SharingShortcutsDialogTheme"> <!-- This activity can respond to Intents of type SEND --> <intent-filter> <action android:name="android.intent.action.SEND" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="text/plain" /> </intent-filter> <!-- Only needed if you import the sharetarget AndroidX library that provides backwards compatibility with the old DirectShare API. The activity that receives the Sharing Shortcut intent needs to be taken into account with this chooser target provider. --> <meta-data android:name="android.service.chooser.chooser_target_service" android:value="androidx.sharetarget.ChooserTargetServiceCompat" /> </activity>
Câu hỏi thường gặp về việc chia sẻ lối tắt
Dữ liệu sử dụng lối tắt được lưu trữ như thế nào và có rời khỏi thiết bị không?
Các lối tắt được lưu trữ hoàn toàn trên thiết bị trong thư mục dữ liệu hệ thống trong phân vùng ổ đĩa đã mã hoá. Chỉ các dịch vụ hệ thống và cùng một ứng dụng phát hành lối tắt mới có thể truy cập vào thông tin trong các lối tắt như biểu tượng, ý định, tên người và tài nguyên.
Tính năng Chia sẻ trực tiếp đã có hoạt động gì?
Chúng tôi đã ra mắt tính năng Chia sẻ trực tiếp trong Android 6.0 (API cấp 23) để cho phép các ứng dụng cung cấp các đối tượng ChooserTarget
thông qua ChooserTargetService
. Kết quả được truy xuất một cách nhanh chóng theo yêu cầu, dẫn đến thời gian tải mục tiêu chậm.
Trong Android 10 (API cấp 29), chúng tôi đã thay thế API Chia sẻ trực tiếp ChooserTargetService
bằng API Chia sẻ lối tắt mới. Thay vì truy xuất kết quả theo yêu cầu, API lối tắt chia sẻ cho phép các ứng dụng xuất bản trước các mục tiêu Chia sẻ trực tiếp. Việc này nhanh chóng đẩy nhanh quá trình truy xuất các mục tiêu Chia sẻ trực tiếp khi chuẩn bị Trang tính chia sẻ. Cơ chế Chia sẻ trực tiếp ChooserTargetService
sẽ tiếp tục hoạt động, nhưng hệ thống xếp hạng các mục tiêu được cung cấp theo cách này thấp hơn mọi mục tiêu sử dụng API Lối tắt chia sẻ.
Android 11 (API cấp 30) đã ngừng sử dụng dịch vụ ChooserTargetService
và Chia sẻ lối tắt API là cách duy nhất để cung cấp mục tiêu Chia sẻ trực tiếp.
Lối tắt được phát hành cho mục tiêu dùng chung khác với lối tắt của trình chạy như thế nào (cách sử dụng lối tắt thông thường khi nhấn và giữ biểu tượng ứng dụng trong trình chạy)?
Mọi lối tắt được phát hành nhằm mục đích "chia sẻ đích" cũng là một lối tắt của trình chạy và sẽ hiển thị trong trình đơn khi bạn nhấn và giữ biểu tượng ứng dụng. Giới hạn số lượng lối tắt tối đa cho mỗi hoạt động cũng áp dụng cho tổng số lối tắt mà một ứng dụng đang phát hành (mục tiêu dùng chung và lối tắt của trình chạy cũ kết hợp).
Có những hướng dẫn nào về số lượng lối tắt chia sẻ mà một người nên phát hành?
Số lượng lối tắt chia sẻ bị giới hạn trong cùng một giới hạn lối tắt động hiện có thông qua getMaxShortcutCountPerActivity(android.content.Context)
. Người dùng có thể phát hành bất kỳ số nào lên giới hạn đó, nhưng phải lưu ý rằng lối tắt chia sẻ có thể hiển thị khi nhấn và giữ trình chạy ứng dụng và trong trang chia sẻ. Hầu hết trình chạy ứng dụng khi nhấn và giữ đều hiển thị tối đa 4 hoặc 5 phím tắt ở chế độ dọc và 8 phím tắt ở chế độ ngang. Hãy xem phần Câu hỏi thường gặp này để biết thêm thông tin và hướng dẫn về cách chia sẻ lối tắt.