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

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

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

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

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

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

  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 Sharesheet จะแสดงเป้าหมายการแชร์โดยตรงจำนวนหนึ่ง โดยคำแนะนำเหล่านี้จะจัดเรียงตามอันดับ คุณอาจปรับปรุงการจัดอันดับทางลัดได้โดยทำดังนี้

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

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

Sharing Shortcuts API

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

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

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

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

setShortLabel(), setLongLabel()

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

ดูตัวอย่างการเผยแพร่ Sharing Shortcuts ใน GitHub

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

หากต้องการสร้าง Sharing Shortcut คุณจะต้องเพิ่มรูปภาพผ่าน setIcon()

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

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

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

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

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

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>

หากผู้ใช้เปิดเป้าหมายการแชร์จากทางลัดของ Launcher แอปจะได้รับ 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 เพื่อระบุทั้ง Sharing Shortcuts และ ChooserTargets

หากต้องการใช้ไลบรารีความเข้ากันได้ของ AndroidX ได้ Manifest ของแอปต้องมี meta-data chooser-target-service และชุดตัวกรอง Intent ดู ChooserTargetService Direct Share API ปัจจุบัน

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

ในตัวอย่างต่อไปนี้ การใช้งาน 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>

คำถามที่พบบ่อยเกี่ยวกับ Sharing Shortcuts

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

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

ประวัติการแชร์โดยตรงเป็นอย่างไร

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

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

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

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

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

คำแนะนำเกี่ยวกับจำนวน Sharing Shortcuts ที่ควรเผยแพร่มีอะไรบ้าง

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