จัดการทางลัด

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

หน้านี้จะอธิบายถึงวิธีการเหล่านี้และวิธีอื่นๆ ที่ใช้กันโดยทั่วไปในการจัดการ ทางลัด

ลักษณะการทำงานของทางลัด

ส่วนต่อไปนี้มีข้อมูลทั่วไปเกี่ยวกับลักษณะการทำงานของแป้นพิมพ์ลัด รวมทั้งระดับการมองเห็น ลำดับการแสดง และลำดับ

การแสดงทางลัด

ทางลัดแบบคงที่และทางลัดแบบไดนามิกจะปรากฏใน Launcher ที่รองรับ หรือ Assistant เมื่อผู้ใช้ทำท่าทางสัมผัสหรือคำสั่งเสียง เปิด Launcher ที่รองรับ ท่าทางสัมผัสคือการแตะและ แตะไอคอน Launcher ของแอปค้างไว้ แต่ท่าทางสัมผัสอาจแตกต่างออกไปในแอป Launcher อื่นๆ ด้วย Google Assistant ทางลัดอาจแสดงใน Assistant หรือเปิดจากผู้ใช้ได้ คำสั่งเสียง

คลาส LauncherApps มี API เพื่อให้แอป Launcher เข้าถึงได้ ทางลัด

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

  • ผู้ใช้นำข้อมูลออก
  • แอปที่เชื่อมโยงกับทางลัดจะถูกถอนการติดตั้ง
  • ผู้ใช้ล้างข้อมูลของแอปโดยไปที่การตั้งค่า > แอปและ การแจ้งเตือน เลือกแอป แล้วแตะพื้นที่เก็บข้อมูล > ล้างพื้นที่เก็บข้อมูล

แชร์เป้าหมาย เป็นชุดย่อยของแป้นพิมพ์ลัดแบบไดนามิกที่ปรากฏในแถวการแชร์โดยตรงของ ชีตการแชร์ของ Android

วันที่ ภาพหน้าจอของ Android Sharesheet
รูปที่ 1 Sharesheet ของ Android เป้าหมายการแชร์โดยตรงจะปรากฏในแถวแรก ตามด้วยแอปที่จัดอันดับแล้วจากรายการแอป

ลำดับการแสดงทางลัด

เมื่อตัวเรียกใช้งานแสดงทางลัดของแอป ทางลัดนั้นจะต้องปรากฏในสิ่งต่อไปนี้ คำสั่งซื้อ:

  1. ทางลัดแบบคงที่: ทางลัดที่ใช้เมธอด isDeclaredInManifest() ส่งคืน true
  2. ทางลัดแบบไดนามิก: ทางลัดที่มี ShortcutInfo.isDynamic() แสดงผล true

ภายในทางลัดแต่ละประเภท ทั้งแบบคงที่และแบบไดนามิก แป้นพิมพ์ลัดจะจัดเรียงตามลำดับ อันดับที่เพิ่มขึ้นตาม ShortcutInfo.getRank Google Assistant จะพิจารณาอันดับของทางลัดเมื่อกำหนดทางลัดตามบริบทที่จะแสดงไปยัง ผู้ใช้

อันดับไม่ติดลบและจำนวนเต็มตามลำดับ ทางลัดแบบคงที่จัดอันดับจาก อยู่ก่อนหลังตามลำดับที่ปรากฏในไฟล์ shortcuts.xml สำหรับแบบไดนามิก คุณจะอัปเดตอันดับของทางลัดที่มีอยู่ได้เมื่อเรียกใช้ updateShortcuts(Context, List) addDynamicShortcuts(Context, List), pushDynamicShortcut(Context, ShortcutInfoCompat) หรือ setDynamicShortcuts(Context, List)

ลำดับของเป้าหมายการแชร์ขึ้นอยู่กับปัจจัยต่างๆ รวมถึงผู้ที่เคยเป็นผู้ใช้ ประวัติ ความใหม่ ความถี่ คำแนะนำอันดับ และลำดับความสำคัญของการสนทนา ที่เกี่ยวข้องกับ ทางลัดการแชร์ แชร์เป้าหมายที่สร้างโดยใช้ API ทางลัดการแชร์ มีความสำคัญมากกว่าเป้าหมายส่วนแบ่งที่สร้างโดย ChooserTargetService ซึ่งเลิกใช้งานแล้วใน Android 11 ใน Android 12 ขึ้นไป ที่สร้างโดย ChooserTargetService ที่เลิกใช้งานแล้วจะไม่ปรากฏในส่วน แชร์ชีต

Launcher ส่วนใหญ่แสดงทางลัดสูงสุด 4 รายการ สำหรับชุดค่าผสมของ ทางลัดแบบคงที่และทางลัดแบบไดนามิกที่ระบุไว้ ตัวเรียกใช้งานจะแสดง แป้นพิมพ์ลัดแบบคงที่ไม่เกิน 2 รายการและแป้นพิมพ์ลัดแบบไดนามิก 2 รายการ ตัวอย่างเช่น หากคุณ กำหนดทางลัดแบบคงที่ 4 รายการและสร้างแบบไดนามิก 3 รายการ โดย Launcher จะแสดงแป้นพิมพ์ลัดแบบคงที่ 2 อันแรก และแป้นพิมพ์ลัด 2 อันแรก แป้นพิมพ์ลัดแบบไดนามิกที่มีลำดับ มากที่สุด

จัดการ Intent และกิจกรรมหลายรายการ

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

กำหนด Intent หลายรายการ

เมื่อสร้างทางลัดด้วย ShortcutInfoCompat.Builder คุณสามารถใช้ setIntents() จาก setIntent() เมื่อโทรหา setIntents() คุณ สามารถเปิดกิจกรรมหลายอย่างภายในแอปของคุณได้เมื่อผู้ใช้เลือกทางลัด โดยวางกิจกรรมทั้งหมด ยกเว้นกิจกรรมสุดท้ายในรายการบนสแต็กด้านหลัง หาก จากนั้นผู้ใช้แตะปุ่มย้อนกลับของอุปกรณ์ ผู้ใช้จะเห็นกิจกรรมอื่นในแอปของคุณ แทนที่จะกลับไปยัง Launcher ของอุปกรณ์

เริ่มกิจกรรมหนึ่งจากอีกกิจกรรมหนึ่ง

ทางลัดแบบคงที่ต้องไม่มีแฟล็ก Intent ที่กำหนดเอง ความตั้งใจแรกของโฆษณาแบบคงที่ ทางลัดจะมี Intent.FLAG_ACTIVITY_NEW_TASK และ Intent.FLAG_ACTIVITY_CLEAR_TASK ชุด ซึ่งหมายความว่าเมื่อแอป กิจกรรมที่มีอยู่ทั้งหมดในแอปจะถูกทำลายเมื่อ เปิดใช้งานแป้นพิมพ์ลัดแล้ว หากคุณไม่ต้องการมีลักษณะเช่นนี้ คุณสามารถใช้แทรมโพลีน กิจกรรม —กิจกรรมที่ซ่อนไว้ซึ่งจะเริ่มต้นกิจกรรมอื่นใน Activity.onCreate(Bundle) ที่โทรหา Activity.finish():

  1. ในไฟล์ AndroidManifest.xml ให้ใส่การกำหนดแอตทริบิวต์ android:taskAffinity= นิ้ว ในกิจกรรมแทรมโพลีน
  2. ในไฟล์ทรัพยากรทางลัด ให้อ้างอิงกิจกรรมแทรมโพลีนใน Intent ภายในทางลัดแบบคงที่

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับกิจกรรมแทรมโพลีน โปรดดูที่การเริ่มต้นกิจกรรมเดียว จากอีกแอปหนึ่ง

ตั้งค่าสถานะ Intent

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

ดูข้อมูลเพิ่มเติมเกี่ยวกับแฟล็กงานและ Intent ได้ที่ Tasks และ Back Stack

อัปเดตทางลัด

ไอคอน Launcher ของแต่ละแอปสามารถมีแบบคงที่และแบบไดนามิกได้มากที่สุด แป้นพิมพ์ลัดที่รวมเข้าด้วยกันซึ่งเท่ากับค่าที่แสดงผลโดย getMaxShortcutCountPerActivity ไม่มีการจำกัดจำนวน ทางลัดที่แอปสร้างได้

เมื่อปักหมุดทางลัดแบบไดนามิกไว้ แม้ว่าผู้เผยแพร่โฆษณาจะนำทางลัดแบบไดนามิกนั้นออก แป้นพิมพ์ลัดแบบไดนามิก ทางลัดที่ปักหมุดไว้จะยังคงเห็นและเปิดใช้ได้ ซึ่งช่วยให้ แอปมีทางลัดมากกว่า getMaxShortcutCountPerActivity() จำนวน

ลองพิจารณาตัวอย่างต่อไปนี้ ซึ่งถือว่าค่าที่ส่งคืนโดย getMaxShortcutCountPerActivity()4:

  1. แอปแชทเผยแพร่ทางลัดแบบไดนามิก 4 รายการ ซึ่งถือเป็น 4 การสนทนาล่าสุด: c1, c2, c3 และ c4
  2. ผู้ใช้ปักหมุดทางลัดทั้ง 4 รายการ
  3. หลังจากนั้น ผู้ใช้เริ่มการสนทนาเพิ่มเติมอีก 3 รายการ ได้แก่ c5, c6 และ c7 แอปของผู้เผยแพร่เผยแพร่ทางลัดแบบไดนามิกอีกครั้ง ทางลัดแบบไดนามิกใหม่ รายการคือ c4, c5, c6 และ c7

แอปจะต้องนำ c1, c2 และ c3 ออกเพราะไม่สามารถแสดงเกิน 4 รายการได้ แป้นพิมพ์ลัดแบบไดนามิก อย่างไรก็ตาม c1, c2 และ c3 ยังคงเป็นทางลัดที่ตรึงไว้ ผู้ใช้สามารถเข้าถึงและเปิดใช้งาน

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

  1. แอปสามารถใช้ updateShortcuts(Context, List) เพื่ออัปเดต ที่มีอยู่ 7 ทางลัด เช่น คุณอาจอัปเดตชุดแป้นพิมพ์ลัดนี้ เวลาที่เพื่อนแชทกัน ไอคอนต่างๆ เปลี่ยนไป
  2. คุณสามารถใช้addDynamicShortcuts(Context, List) และ setDynamicShortcuts(Context, List) วิธีเพื่ออัปเดตทางลัดที่มีอยู่ โดยใช้รหัสเดียวกัน แต่จะใช้เพื่ออัปเดตแบบไม่ใช่ไดนามิกไม่ได้ เนื่องจากทั้งสองวิธีนี้พยายามแปลงรายการที่ระบุ ไปยังทางลัดแบบไดนามิกได้

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

หากต้องการดูข้อมูลเพิ่มเติมเกี่ยวกับหลักเกณฑ์สำหรับทางลัดของแอป รวมถึงการอัปเดตทางลัด ดูแนวทางปฏิบัติแนะนำสำหรับทางลัด

จัดการการเปลี่ยนแปลงภาษาของระบบ

แอปต้องอัปเดตทางลัดแบบไดนามิกและทางลัดที่ปักหมุดไว้เมื่อได้รับ ข้อความ Intent.ACTION_LOCALE_CHANGED แสดงการเปลี่ยนแปลงในระบบ ภาษา

ติดตามการใช้งานทางลัด

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

  • ผู้ใช้เลือกทางลัดด้วยรหัสที่กำหนด
  • ภายในแอป ผู้ใช้ดำเนินการต่างๆ ที่เกี่ยวข้องกับ ทางลัดเดียวกัน

แอปของคุณจะติดตามการใช้งานสำหรับทางลัดแบบไดนามิกโดยเรียกใช้ฟังก์ชัน pushDynamicShortcut() และส่งรหัสของทางลัดเมื่อ เกิดเหตุการณ์ที่เกี่ยวข้อง การพุชการใช้ทางลัดแบบไดนามิกด้วยเมธอดนี้จะทำให้ แอป Assistant เช่น Google Assistant จะแนะนำทางลัดที่เกี่ยวข้องให้กับผู้ใช้ เนื่องจากเมธอด pushDynamicShortcut() จะรายงานการใช้งานเมื่อเรียกใช้ ไม่ต้องโทร เมธอด reportShortcutUsed() สำหรับทางลัดเดียวกัน

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

ปิดใช้ทางลัด

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

การจำกัดอัตราคำขอ

เมื่อใช้ setDynamicShortcuts(), addDynamicShortcuts() หรือ updateShortcuts() คุณอาจสามารถเรียกเมธอดเหล่านี้ จำนวนครั้งในแอปที่ทำงานอยู่เบื้องหลัง ซึ่งก็คือแอปที่ไม่มีกิจกรรมหรือ บริการที่ทำงานอยู่เบื้องหน้า จำนวนครั้งสูงสุดที่คุณสามารถ เรียกเมธอดเหล่านี้ว่าการจำกัดอัตรา ฟีเจอร์นี้จะป้องกันไม่ให้ ShortcutManagerCompat จากทรัพยากรของอุปกรณ์ที่มากเกินไป

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

  • แอปจะเข้ามาในเบื้องหน้า
  • ภาษาของระบบจะเปลี่ยนแปลง
  • ผู้ใช้ดำเนินการตอบกลับในบรรทัดกับการแจ้งเตือน

หากพบการจำกัดอัตราในระหว่างการพัฒนาหรือการทดสอบ คุณสามารถเลือก ตัวเลือกสำหรับนักพัฒนาซอฟต์แวร์ > รีเซ็ตการจำกัดอัตราของ ShortcutManager จาก การตั้งค่า หรือป้อนคำสั่งต่อไปนี้ใน adb

$ adb shell cmd shortcut reset-throttling [ --user your-user-id ]

การสำรองและคืนค่า

คุณจะอนุญาตให้ผู้ใช้ดำเนินการสำรองและกู้คืนข้อมูลในแอปได้ในกรณีต่อไปนี้ การเปลี่ยนอุปกรณ์โดยรวม android:allowBackup="true" แอตทริบิวต์ ในไฟล์ Manifest ของแอป หากคุณรองรับการสำรองและกู้คืนข้อมูล โปรดเก็บข้อมูลไว้ ประเด็นต่อไปนี้เกี่ยวกับทางลัดของแอปที่ควรคำนึงถึง

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

ข้อมูลโค้ดต่อไปนี้แสดงวิธีที่ดีที่สุดในการคืนค่าแบบไดนามิกของแอป และวิธีตรวจสอบว่าทางลัดที่ปักหมุดไว้ของแอปยังคงอยู่หรือไม่

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.
            }
        }
    }
    // ...
}