ระบุเป้าหมายส่วนแบ่งโดยตรง

ภาพที่ 1: แถวการแชร์โดยตรงใน Sharesheet ดังที่แสดงใน 1

ใช้เป้าหมายการแชร์โดยตรงเพื่อให้ผู้ใช้แอปอื่นสะดวกและรวดเร็วยิ่งขึ้น เพื่อแชร์ URL, รูปภาพ หรือข้อมูลประเภทอื่นๆ กับแอปของคุณ ผลงาน Direct Share ด้วยการนำเสนอรายชื่อติดต่อจากแอปรับส่งข้อความและแอปโซเชียลโดยตรงใน Android Sharesheet โดยที่ผู้ใช้ไม่ต้องเลือกแอปแล้วค้นหารายชื่อติดต่อ

ShortcutManagerCompat เป็น AndroidX API ที่ให้ทางลัดการแชร์ และใช้งานร่วมกับ ChooserTargetService API ที่เลิกใช้งานแล้วได้ วิธีนี้เป็นวิธีที่แนะนำในการเผยแพร่ทั้งทางลัดการแชร์และ ChooserTargets สำหรับคำแนะนำ ดูใช้ AndroidX เพื่อระบุทั้งทางลัดการแชร์และ ChooserTargets ในหน้านี้

เผยแพร่เป้าหมายการแชร์โดยตรง

แถวการแชร์โดยตรงของชีตการแชร์จะแสดงเฉพาะทางลัดแบบไดนามิกที่ Sharing Shortcuts API ระบุ ทำตามขั้นตอนต่อไปนี้เพื่อเผยแพร่ Direct Share เป้าหมาย

  1. ประกาศองค์ประกอบ share-target ในไฟล์ทรัพยากร XML ของแอป

    <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>
    
  2. เมื่อแอปเริ่มต้น ให้ใช้ setDynamicShortcuts เพื่อจัดลำดับทางลัดแบบไดนามิกตามความสำคัญ

    ดัชนีที่ต่ำลงบ่งบอกถึงความสําคัญที่มากขึ้น หากคุณต้องติดต่อสื่อสาร ก็เป็นการสนทนายอดนิยม โดยเรียงลำดับตามความใหม่ตามที่ปรากฏใน แอปของคุณ อย่าเผยแพร่ทางลัดที่ไม่มีอัปเดต การสนทนาที่ไม่มี กิจกรรมของผู้ใช้ในช่วง 30 วันที่ผ่านมาถือว่าเป็นกิจกรรมที่ไม่มีอัปเดต

    Kotlin

    ShortcutManagerCompat.setDynamicShortcuts(myContext, listOf(shortcut1, shortcut2, ..))

    Java

    List<ShortcutInfoCompat> shortcuts = new ArrayList<>();
    shortcuts.add(shortcut1);
    shortcuts.add(shortcut2);
    ...
    ShortcutManagerCompat.setDynamicShortcuts(myContext, shortcuts);
  3. หากคุณกำลังพัฒนาแอปการสื่อสาร ให้รายงานการใช้งานทางลัดผ่าน pushDynamicShortcut ทันทีทุกครั้งที่ผู้ใช้ได้รับหรือส่งข้อความถึงรายชื่อติดต่อ ดูข้อมูลเพิ่มเติมที่หัวข้อรายงานการใช้งานทางลัดสำหรับแอปการสื่อสารในหน้านี้ ตัวอย่างเช่น รายงานการใช้งานสำหรับข้อความที่ส่งโดยผู้ใช้โดย ระบุการเชื่อมโยงความสามารถในทางลัดโดยใช้ ShortcutInfoCompat.Builder#addCapabilityBinding ที่มีความสามารถ 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);
  4. หากผู้ใช้ลบรายชื่อติดต่อ ให้ใช้ removeLongLivedShortcut วิธีนี้เป็นวิธีที่แนะนำในการนำทางลัดออก ไม่ว่าบริการของระบบจะแคชไว้หรือไม่ก็ตาม ข้อมูลโค้ดต่อไปนี้จะแสดงตัวอย่างวิธีการ

    Kotlin

    val deleteShortcutId = "..."
    ShortcutManagerCompat.removeLongLivedShortcuts(myContext, listOf(deleteShortcutId))

    Java

    String deleteShortcutId = "...";
    ShortcutManagerCompat.removeLongLivedShortcuts(
        myContext, Arrays.asList(deleteShortcutId));

ปรับปรุงอันดับของเป้าหมายการแชร์โดยตรง

ชีตการแชร์ของ Android จะแสดงเป้าหมายการแชร์โดยตรงจำนวนคงที่ เหล่านี้ คำแนะนำจะจัดเรียงตามอันดับ คุณสามารถปรับปรุงการจัดอันดับ โดยทำตามขั้นตอนต่อไปนี้

  • ตรวจสอบว่า shortcutIds ทั้งหมดไม่ซ้ำกันและไม่นำมาใช้ซ้ำสำหรับเป้าหมายต่างๆ กัน
  • การโทรจะทำให้ทางลัดใช้งานได้นาน setLongLived(true)
  • สําหรับแป้นพิมพ์ลัดที่เกี่ยวข้องกับการสนทนา ให้รายงานการใช้ทางลัด สำหรับข้อความขาออกและข้อความขาเข้าโดยเผยแพร่ทางลัดที่เกี่ยวข้องอีกครั้ง ถึง ShortcutManagerCompat.pushDynamicShortcut โปรดดูรายงานการใช้ทางลัดสำหรับแอปการสื่อสารในหน้านี้ เพื่อดูรายละเอียด
  • หลีกเลี่ยงการกำหนดเป้าหมายการแชร์โดยตรงที่ไม่เกี่ยวข้องหรือไม่ทันสมัย เช่น รายชื่อติดต่อที่ผู้ใช้ไม่ได้ส่งข้อความถึงในช่วง 30 วันที่ผ่านมา
  • สำหรับแอป SMS โปรดหลีกเลี่ยงการให้แป้นพิมพ์ลัดสำหรับหมายเลขพิเศษหรือการสนทนาที่ระบุว่าอาจเป็นสแปม ผู้ใช้มีแนวโน้มที่จะแชร์ไปยังการสนทนาเหล่านั้นน้อยมาก
  • เรียกใช้ setCategories() เพื่อเชื่อมโยงทางลัดกับ เหมาะสม mimeType ตัวอย่างเช่น สําหรับแอป SMS หากผู้ติดต่อไม่ได้เปิดใช้ RCS หรือ MMS คุณก็จะไม่ทำสิ่งต่อไปนี้ เชื่อมโยงทางลัดที่สอดคล้องกันกับประเภท MIME ที่ไม่ใช่ข้อความ เช่น image/* และ video/*
  • สำหรับการสนทนาหนึ่งๆ เมื่อมีการพุชทางลัดแบบไดนามิกและการใช้งานเป็น รายงานแล้ว ไม่ต้องเปลี่ยนรหัสทางลัด วิธีนี้ช่วยให้มั่นใจได้ว่าระบบจะเก็บข้อมูลการใช้งานไว้เพื่อการจัดอันดับ

หากผู้ใช้แตะเป้าหมายการแชร์โดยตรง แอปของคุณต้องนําผู้ใช้ไปยัง UI ที่ผู้ใช้สามารถดําเนินการกับเรื่องที่เป็นเป้าหมายได้โดยตรง อย่าแสดง UI เพื่อการตีความที่ชัดเจนแก่ผู้ใช้ และอย่าวาง UI ดังกล่าวใน UI ที่ไม่เกี่ยวข้องกับเป้าหมายที่ผู้ใช้แตะ เช่น ในแอปรับส่งข้อความ ให้แตะการแชร์โดยตรง นำผู้ใช้ไปยังมุมมองการสนทนากับบุคคลที่เลือก แป้นพิมพ์จะปรากฏขึ้นและระบบจะป้อนข้อมูลที่มีการแชร์ล่วงหน้าในข้อความ

API ทางลัดการแชร์

เริ่มตั้งแต่ Android 10 (API ระดับ 29) ShortcutInfo.Builder ได้เพิ่มวิธีการและการเพิ่มประสิทธิภาพ ที่ให้ข้อมูลเพิ่มเติมเกี่ยวกับเป้าหมายการแชร์

setCategories()
ใน Android 10 เป็นต้นไป หมวดหมู่จะใช้เพื่อกรองทางลัดที่ สามารถจัดการการแชร์ Intent หรือการดำเนินการต่างๆ ได้ โปรดดูรายละเอียดที่หัวข้อประกาศเป้าหมายการแชร์ ช่องนี้ต้องระบุสำหรับทางลัดที่มีไว้เพื่อใช้เป็นเป้าหมายการแชร์
setLongLived()

ระบุว่าทางลัดใช้งานได้หรือไม่เมื่อแอปไม่ได้เผยแพร่หรือทำให้ทางลัดนั้นมองไม่เห็น (เป็นทางลัดแบบไดนามิกหรือทางลัดที่ปักหมุดไว้) หากทางลัดมีอายุการใช้งานนาน บริการต่างๆ ของระบบอาจแคชทางลัดไว้ได้ แม้ว่าจะเลิกเผยแพร่เป็นทางลัดแบบไดนามิกแล้วก็ตาม

การทำให้ทางลัดใช้งานได้ยาวนานช่วยปรับปรุงการจัดอันดับได้ ดูรับสิ่งที่ดีที่สุด การจัดอันดับเพื่อดูรายละเอียด

setShortLabel(), setLongLabel()

เมื่อเผยแพร่ทางลัดไปยังผู้ใช้แต่ละราย โปรดป้อนข้อมูลแบบเต็มของบุคคลดังกล่าว ชื่อใน setLongLabel() และชื่อย่ออื่นๆ เช่น ชื่อเล่นหรือชื่อ ใน setShortLabel()

ดูตัวอย่างการเผยแพร่ทางลัดการแชร์บน GitHub

ระบุภาพทางลัด

หากต้องการสร้างทางลัดการแชร์ คุณจะต้องเพิ่มรูปภาพผ่าน setIcon()

แป้นพิมพ์ลัดสำหรับการแชร์อาจปรากฏในแพลตฟอร์มต่างๆ ของระบบและอาจมีการปรับเปลี่ยนรูปร่าง นอกจากนี้ อุปกรณ์บางรุ่นที่ใช้ Android เวอร์ชัน 7, 8 หรือ 9 (API ระดับ 25, 26, 27 และ 28) อาจแสดงไอคอนแบบบิตแมปเท่านั้นโดยไม่มีพื้นหลัง ซึ่งจะลดคอนทราสต์ลงอย่างมาก วิธีตรวจสอบว่าทางลัดมีลักษณะตามที่ต้องการ ให้บิตแมปแบบปรับอัตโนมัติได้โดยใช้ IconCompat.createWithAdaptiveBitmap()

ตรวจสอบว่าบิตแมปแบบปรับอัตโนมัติเป็นไปตามหลักเกณฑ์และมิติข้อมูลเดียวกับที่กำหนดไว้สำหรับไอคอนแบบปรับอัตโนมัติ วิธีที่ใช้กันมากที่สุดในการทำเช่นนี้คือการปรับขนาดบิตแมปสี่เหลี่ยมจัตุรัสที่ต้องการเป็น 72x72 dp และจัดกึ่งกลางภายในผืนผ้าใบโปร่งใสขนาด 108x108 dp หากไอคอนของคุณ ครอบคลุมพื้นที่ที่โปร่งใส คุณจำเป็นต้องใส่สีพื้นหลังด้วย หรือไม่เช่นนั้น ส่วนที่โปร่งใสจะปรากฏเป็นสีดำ

อย่าปกปิดรูปภาพตามรูปร่างที่เจาะจง ตัวอย่างเช่น ก่อนที่จะ Android 10 (API ระดับ 29) มักจะให้รูปโปรไฟล์ผู้ใช้สำหรับการแชร์โดยตรง ChooserTarget ที่ถูกมาสก์เป็นแวดวง Sharesheet ของ Android และอื่นๆ แพลตฟอร์มของระบบใน Android 10 ได้มีรูปร่างและธีมทางลัด วิธีแนะนำในการแสดงทางลัดการแชร์ผ่าน ShortcutManagerCompat คือการเปลี่ยนรูปร่างของวัตถุการแชร์โดยตรง ChooserTarget ที่เข้ากันได้แบบย้อนหลังเป็นวงกลมให้คุณโดยอัตโนมัติ

ประกาศเป้าหมายการแชร์

คุณต้องประกาศเป้าหมายการแชร์ในไฟล์ทรัพยากรของแอป ซึ่งคล้ายกับคำจำกัดความของทางลัดแบบคงที่ เพิ่มคำจำกัดความเป้าหมายการแชร์ภายในองค์ประกอบรูท <shortcuts> ในไฟล์ทรัพยากร พร้อมกับคำจำกัดความทางลัดแบบคงที่อื่นๆ องค์ประกอบ <share-targets> แต่ละรายการมีข้อมูลเกี่ยวกับประเภทข้อมูลที่แชร์ หมวดหมู่ที่ตรงกัน และคลาสเป้าหมายที่จะจัดการความตั้งใจในการแชร์ โค้ด XML จะมีลักษณะดังนี้

<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>

องค์ประกอบข้อมูลในเป้าหมายการแชร์จะคล้ายกับข้อกําหนดของข้อมูลในตัวกรอง Intent เป้าหมายการแชร์แต่ละรายการอาจมีหมวดหมู่ได้หลายหมวดหมู่ ซึ่งจะใช้เพื่อจับคู่ทางลัดที่เผยแพร่ของแอปกับคำจำกัดความของเป้าหมายการแชร์เท่านั้น หมวดหมู่อาจมีค่าใดก็ได้ที่แอปกำหนด

ในกรณีที่ผู้ใช้เลือกทางลัดการแชร์ใน Android Sharesheet ที่ ตรงกับตัวอย่างส่วนแบ่งเป้าหมายข้างต้น แอปจะได้รับข้อมูลต่อไปนี้ ความตั้งใจในการแชร์:

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>

หากผู้ใช้เปิดเป้าหมายการแชร์จากทางลัดตัวเปิดแอป แอปจะได้รับ Intent ที่สร้างขึ้นเมื่อเพิ่มทางลัดการแชร์ลงใน ShortcutManagerCompat เนื่องจากเป็น Intent อื่น Intent.EXTRA_SHORTCUT_ID จึงจะใช้ไม่ได้ และคุณจะต้องส่งรหัสด้วยตนเองหากต้องการ

รายงานการใช้ทางลัดสำหรับแอปการสื่อสาร

ถ้าคุณกำลังพัฒนาแอปการสื่อสาร คุณสามารถปรับปรุงอันดับของคุณใน Android Sharesheet โดยรายงานการใช้งานทั้งข้อความขาออกและข้อความขาเข้า โดยเผยแพร่แป้นพิมพ์ลัดการสนทนาที่แสดงข้อมูลติดต่อผ่าน ShortcutManagerCompat.pushDynamicShortcut

การใช้งานทางลัดและการเชื่อมโยงความสามารถใช้ได้กับ Android 5.0 แบบย้อนหลัง (API 21)

รายงานการใช้แป้นพิมพ์ลัดสำหรับข้อความขาออก

การใช้งานการรายงานสำหรับข้อความที่ส่งโดยผู้ใช้นั้นทำงานคล้ายกับ คลิกลิงก์ "ส่ง" หลังจากสร้างข้อความ

หากต้องการทริกเกอร์การรายงานการใช้งาน ให้ระบุการเชื่อมโยงความสามารถในทางลัด จนถึง ShortcutInfoCompat.Builder#addCapabilityBinding ที่มีความสามารถ 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);

หากข้อความขาออกมีไว้สำหรับแชทกลุ่ม คุณต้องเพิ่มค่าพารามิเตอร์ Audience ด้วย เนื่องจากประเภท recipient เชื่อมโยงกับความสามารถดังกล่าว

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);

รายงานการใช้แป้นพิมพ์ลัดสำหรับข้อความขาเข้า

หากต้องการทริกเกอร์การรายงานการใช้งานเมื่อผู้ใช้ได้รับข้อความ เช่น SMS, ข้อความแชท, อีเมล หรือการแจ้งเตือน คุณต้องระบุการเชื่อมโยงความสามารถเพิ่มเติมในทางลัดผ่าน ShortcutInfoCompat.Builder#addCapabilityBinding ที่มีความสามารถ 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);

หากข้อความขาเข้ามาจากแชทกลุ่ม คุณต้องเพิ่มค่าพารามิเตอร์ Audience ด้วยเนื่องจากประเภท sender เชื่อมโยงกับความสามารถดังกล่าว

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);

ใช้ AndroidX เพื่อระบุทั้งทางลัดการแชร์และ ChooserTargets

ไฟล์ Manifest ของแอปต้องมีชุดข้อมูลเมตา chooser-target-service และ intent-filter จึงจะทำงานร่วมกับไลบรารีความเข้ากันได้ของ AndroidX ได้ ดูChooserTargetService Direct Share API ปัจจุบัน

มีการประกาศบริการนี้ในไลบรารีความเข้ากันได้แล้ว ดังนั้นผู้ใช้จึง ไม่จำเป็นต้องประกาศบริการในไฟล์ Manifest ของแอป อย่างไรก็ตาม คุณต้องพิจารณาลิงก์จากกิจกรรมการแชร์ไปยังบริการเป็นผู้ให้บริการเป้าหมายของเครื่องมือเลือก

ในตัวอย่างนี้ การติดตั้งใช้งาน ChooserTargetService คือ androidx.core.content.pm.ChooserTargetServiceCompat ซึ่งได้กําหนดไว้แล้วใน 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>

คำถามที่พบบ่อยเกี่ยวกับทางลัดการแชร์

ระบบจัดเก็บข้อมูลการใช้งานทางลัดอย่างไรและข้อมูลดังกล่าวจะออกจากอุปกรณ์หรือไม่

ระบบจะจัดเก็บทางลัดทั้งหมดไว้ในอุปกรณ์ในไดเรกทอรีข้อมูลระบบใน พาร์ติชันดิสก์ที่เข้ารหัส เฉพาะบริการของระบบและแอปเดียวกันที่เผยแพร่ทางลัดเท่านั้นที่สามารถเข้าถึงข้อมูลในทางลัด เช่น ไอคอน Intent และชื่อบุคคลและทรัพยากร

การแชร์โดยตรงมีประวัติอย่างไร

เราได้เปิดตัว Direct Share ใน Android 6.0 (API ระดับ 23) เพื่ออนุญาตให้แอปทำสิ่งต่อไปนี้ ระบุออบเจ็กต์ ChooserTarget รายการผ่าน ChooserTargetService ระบบดึงข้อมูลตามคำขอ ซึ่งทําให้เวลาในการโหลดเป้าหมายช้า

ใน Android 10 (API ระดับ 29) เราได้แทนที่ ChooserTargetService Direct แชร์ API ด้วยตัวเลือกการแชร์ ทางลัด API ใหม่ แทนการดึงข้อมูลผลลัพธ์ แบบตอบสนองตามคำขอ API ทางลัดการแชร์ช่วยให้แอปเผยแพร่ Direct Share ได้ เป้าหมายล่วงหน้า การทำเช่นนี้ช่วยให้กระบวนการดึงข้อมูลการแชร์โดยตรงเร็วขึ้นอย่างรวดเร็ว เมื่อเตรียม ShareSheet การแชร์โดยตรงของ ChooserTargetService จะยังคงทำงานต่อไป แต่ระบบจัดอันดับเป้าหมายที่มี ด้วยวิธีนี้ จะต่ำกว่าเป้าหมายใดก็ตามที่ใช้ API ทางลัดการแชร์

Android 11 (API ระดับ 30) ได้เลิกใช้งานบริการ ChooserTargetService แล้ว และ Sharing Shortcuts API เป็นวิธีเดียวในการระบุเป้าหมายการแชร์โดยตรง

แป้นพิมพ์ลัดที่เผยแพร่สำหรับเป้าหมายการแชร์แตกต่างจากแป้นพิมพ์ลัดของตัวเปิดแอป (การใช้งานแป้นพิมพ์ลัดทั่วไปเมื่อกดไอคอนแอปค้างไว้ในตัวเปิดแอป) อย่างไร

แป้นพิมพ์ลัดที่เผยแพร่สำหรับ "แชร์เป้าหมาย" ก็ยังคงเป็น Launcher และจะแสดงในเมนูเมื่อกดไอคอนของแอปค้างไว้ ขีดจำกัดจำนวนทางลัดสูงสุดต่อกิจกรรมจะมีผลกับจำนวนทางลัดทั้งหมดที่แอปเผยแพร่ด้วย (รวมเป้าหมายการแชร์และทางลัดของ Launcher รุ่นเดิม)

คำแนะนำเกี่ยวกับจำนวนแป้นพิมพ์ลัดการแชร์ที่ควรเผยแพร่

จำนวนทางลัดการแชร์จะจำกัดไว้ที่ขีดจำกัดแบบไดนามิกของเดิม แป้นพิมพ์ลัดที่ใช้ได้ผ่านทาง getMaxShortcutCountPerActivity(android.content.Context) คุณสามารถเผยแพร่จำนวนใดก็ได้ตามขีดจำกัดดังกล่าว แต่โปรดทราบว่าทางลัดการแชร์จะปรากฏในการกดแอป Launcher ค้างไว้และในชีตการแชร์ ตัวเปิดแอปส่วนใหญ่ที่กดค้างไว้จะแสดงทางลัดได้สูงสุด 4 หรือ 5 รายการในโหมดแนวตั้ง และ 8 รายการในโหมดแนวนอน ดู คำถามที่พบบ่อย เพื่อดูรายละเอียดเพิ่มเติมและคําแนะนําเกี่ยวกับทางลัดการแชร์