![](https://developer.android.com/static/training/sharing/direct-share-targets.png?authuser=9&hl=vi)
Sử dụng mục tiêu Chia sẻ trực tiếp để giúp người dùng các ứng dụng khác dễ dàng và nhanh chóng hơn để 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. Hoạt động của tính năng Chia sẻ trực tiếp bằng cách trình bày danh bạ qua các ứng dụng nhắn tin và mạng xã hội ngay trên Android Trang chia sẻ nội dung mà người dùng không phải chọn ứng dụng rồi tìm người liên hệ.
ShortcutManagerCompat
là một API AndroidX cung cấp Lối tắt chia sẻ và là lối tắt
tương thích với API ChooserTargetService
không dùng nữa. Đây là lựa chọn ưu tiên
xuất bản cả Lối tắt chia sẻ và ChooserTargets
. Để xem hướng dẫn,
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ẻ nội dung chỉ hiển thị các lối tắt động do Share Shortcuts API (API Lối tắt chia sẻ). Hoàn tất các bước sau để xuất bản tính năng Chia sẻ trực tiếp mục tiêu.
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 động, hãy sử 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 giao tiếp của ứng dụng, chúng có thể là những cuộc trò chuyện hàng đầu được sắp xếp theo thời gian 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 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 phím 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ệ. Xem bài viết Báo cáo việc sử dụng lối tắt cho ứng dụng giao tiếp trên trang này để biết thêm thông tin. Ví dụ: báo cáo việc sử dụng tin nhắn do người dùng gửi bằng chỉ định các liên kết chức năng trong lối tắt thông quaShortcutInfoCompat.Builder#addCapabilityBinding
bằng 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 người liên hệ, hãy sử dụng
removeLongLivedShortcut
. Đây là lựa chọn ưu tiên để xoá lối tắt bất kể nó có được hệ thống lưu vào bộ nhớ đệm hay không luôn miễn phí. Đ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 Android hiển thị số lượng mục tiêu Chia sẻ trực tiếp cố định. Các đề xuất được sắp xếp theo thứ hạng. Bạn có thể cải thiện thứ hạng của bằng cách làm như sau:
- Đảm bảo tất cả
shortcutIds
đều 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 lâu dài bằng cách gọi
setLongLived(true)
. - Đối với các lối tắt liên quan đến cuộc trò chuyện, hãy báo cáo việc sử dụng lối tắt
cho các thư đi và thư đến bằng cách xuất bản lại các lối tắt tương ứng
đến
ShortcutManagerCompat.pushDynamicShortcut
. Xem bài viết Báo cáo việc sử dụng lối tắt cho các ứng dụng liên lạc về vấn đề này để biết thông tin chi tiết. - Tránh cung cấp mục tiêu Chia sẻ trực tiếp không phù hợp hoặc lỗi thời (ví dụ: những người liên hệ mà người dùng không nhắn tin trong vòng 30 ngày qua.
- Đối với ứng dụng SMS, tránh cung cấp lối tắt cho mã ngắn hoặc cuộc trò chuyện được xác định có thể là nội dung rác. Người dùng í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ớimimeType
phù hợp . Ví dụ: đối với ứng dụng SMS, nếu người liên hệ không bật RCS hoặc MMS, bạn sẽ không liên kết lối tắt tương ứng với loại MIME không phải 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 một lối tắt động được đẩy và mức sử dụng đã báo cáo, đừng thay đổi mã lối tắt. Việc này giúp đảm bảo 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 hành động trực tiếp trên đối tượng mục tiêu. Không trình bày cho người dùng một giao diện người dùng phân định và không đặt chúng vào một giao diện người dùng không liên quan đến mục tiêu được nhấn. Ví dụ: trong một ứng dụng nhắn tin, nhấn vào nút Chia sẻ trực tiếp target đưa người dùng đến chế độ xem cuộc trò chuyện với người mà họ đã chọn. Chiến lược phát hành đĩa đơn bàn phím đang hiển thị và tin nhắn được điền sẵn bằng dữ liệu được chia sẻ.
API Chia sẻ lối tắt
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 hành động chia sẻ. Xem bài viết Khai báo một cổ phần target để biết thông tin chi tiết. Đây là trường bắt buộc cho lối tắt sẽ được dùng làm mục tiêu chia sẻ.
setLongLived()
Chỉ định liệu một lối tắt có hợp lệ hay không khi lối tắt đó đã bị huỷ xuất bản hoặc ẩn bị ứng dụng ẩn (dưới dạng lối tắt động hoặc được ghim). Nếu một lối tắt tồn tại lâu dài, nó có thể được nhiều dịch vụ hệ thống lưu vào bộ nhớ đệm ngay cả khi đã bị huỷ xuất bản dưới dạng lối tắt động.
Việc tạo lối tắt tồn tại lâu dài có thể cải thiện thứ hạng của lối tắt. Xem phần Khai thác tối đa thứ hạng để biết thông tin chi tiết.
setShortLabel()
,setLongLabel()
Khi xuất bản lối tắt cho một cá nhân, vui lòng cung cấp đầy đủ thông tin về người đó tên bằng
setLongLabel()
và bất kỳ tên ngắn nào (chẳng hạn như biệt hiệu hoặc tên) tên, trongsetShortLabel()
.
Hãy xem ví dụ về cách xuất bản lối tắt 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 thay đổi hình dạng.
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 hiển thị như bạn mong muốn,
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 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à điều chỉnh tỷ lệ bitmap vuông dự kiến thành 72x72 dp và căn giữa bên trong canvas trong suốt 108x108 dp. Nếu biểu tượng của bạn bao gồm các vùng trong suốt, bạn cần thêm màu nền; nếu không thì các vùng trong suốt sẽ có màu đen.
Không cung cấp hình ảnh được che kín theo một hình dạng cụ thể. Ví dụ: trước khi
Android 10 (API cấp 29), thường cung cấp hình đại diện của người dùng cho tính năng Chia sẻ trực tiếp
ChooserTarget
đã bị che khuất trong một vòng tròn. Trang chia sẻ nội dung của Android và
các bề mặt hệ thống trong Android 10 nay được định hình và hình ảnh lối tắt theo giao diện.
Phương thức ưu tiên để cung cấp Lối tắt chia sẻ, thông qua
ShortcutManagerCompat
!
tự động định hình các đối tượng ChooserTarget
có khả năng tương thích ngượ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 đích 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 phần sở hữu
định nghĩa mục tiêu bên trong phần tử gốc <shortcuts>
của 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 so khớp và
lớp mục tiêu sẽ xử lý ý định chia sẻ. Mã XML trông có vẻ như
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 (chỉ dùng để khớp với lối tắt đã xuất bản của ứng dụng) cùng với định nghĩa mục tiêu chia sẻ. Danh mục có thể có bất kỳ ứng dụng tuỳ ý nào được xác định giá trị.
Trong trường hợp người dùng chọn Lối tắt chia sẻ trong Trang chia sẻ nội dung trên Android mà với tỷ lệ chia sẻ mục tiêu trong ví dụ ở trên, ứng dụng sẽ nhận được ý định chia sẻ:
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ẻ từ các phím tắt của trình chạy, ứng dụng sẽ nhận được
ý định được tạo khi thêm lối tắt chia sẻ vào
shortcutManagerCompat.
Vì đây là một ý định khác nên bạn không thể sử dụng Intent.EXTRA_SHORTCUT_ID
,
và bạn sẽ phải chuyển mã này theo cách thủ công nếu cần.
Báo cáo việc sử dụng phím tắt cho các ứ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 của mình 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 trò chuyện đại diện cho người liên hệ thông qua
ShortcutManagerCompat.pushDynamicShortcut
.
Việc sử dụng phím 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 việc sử dụng phím tắt cho thư đi
Việc sử dụng tính năng báo cáo cho tin nhắn do người dùng gửi có chức năng tương tự như 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 phím tắt
đến ShortcutInfoCompat.Builder#addCapabilityBinding
bằng 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 một cuộc trò chuyện nhóm, bạn cũng phải thêm Audience
giá trị tham số là recipient
loại được liên kết với chức năng đó.
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 phím tắt cho tin nhắn đến
Cách 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 một 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 khả năng
liên kết trong lối tắt thông qua
ShortcutInfoCompat.Builder#addCapabilityBinding
với
chức 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ừ một cuộc trò chuyện nhóm, bạn cũng phải thêm Audience
làm loại sender
được liên kết với chức năng.
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à Chọn mục tiêu
Để 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 siêu dữ liệu chooser-target-service và bộ lọc ý định. 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 sẽ 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ẻ với dịch vụ phải được xem xét như một mục tiêu trình chọn Google Cloud.
Trong ví dụ sau, việc 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à chúng có rời khỏi thiết bị không?
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 một phân vùng ổ đĩa đã mã hoá. Thông tin trong các lối tắt như biểu tượng, ý định và tên người cũng như tài nguyên chỉ có thể truy cập được bằng dịch vụ hệ thống và cùng một ứng dụng xuất bản lối tắt.
Lịch sử của tính năng Chia sẻ trực tiếp là 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 đối tượng ChooserTarget
thông qua ChooserTargetService
. Kết quả là
được truy xuất một cách bị độ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ế ChooserTargetService
Direct
Chia sẻ API bằng API Lối tắt chia sẻ mới. Thay vì truy xuất kết quả
một cách linh hoạt theo yêu cầu, Share Shortcuts API cho phép các ứng dụng xuất bản tính năng Chia sẻ trực tiếp
nhắm mục tiêu trước. Việc này giúp đẩy nhanh quá trình truy xuất tính năng Chia sẻ trực tiếp
nhắm mục tiêu khi chuẩn bị Trang chia sẻ nội dung. Chia sẻ trực tiếp ChooserTargetService
cơ chế 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 bất kỳ mục tiêu nào sử dụng Share Shortcuts API (API Lối tắt chia sẻ).
Android 11 (API cấp 30) không dùng dịch vụ ChooserTargetService
nữa, 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.
Các lối tắt được xuất bản cho đích chia sẻ khác với trình chạy như thế nào phím tắt (cách sử dụng phím 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 xuất bản cho "mục tiêu chia sẻ" mục đích, cũng là một trình chạy và sẽ được hiển thị trong trình đơn khi nhấn và giữ biểu tượng của ứng dụng. Chiến lược phát hành đĩa đơn giới hạn số lượng phím 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 xuất bản (mục tiêu chia sẻ và lối tắt trình chạy cũ kết hợp).
Hướng dẫn về số lượng lối tắt chia sẻ mà một người dùng nên xuất bản.
Số lượng lối tắt chia sẻ bị hạn chế ở cùng một giới hạn của động
lối tắt hiện có qua
getMaxShortcutCountPerActivity(android.content.Context)
. Nhà quảng cáo có thể xuất bản bất kỳ
lên giới hạn đó nhưng phải nhớ rằng lối tắt chia sẻ có thể hiển thị
trong trình chạy ứng dụng bằng cách nhấn và giữ
và trong trang chia sẻ. Hầu hết trình chạy ứng dụng đang bật
nhấn và giữ để hiển thị tối đa 4 hoặc 5 phím tắt ở chế độ dọc, và
8 ở chế độ ngang. Xem
Câu hỏi thường gặp
để biết thêm thông tin và hướng dẫn về cách chia sẻ lối tắt.