หลังจากสร้างทางลัดแล้ว คุณอาจต้องจัดการทางลัดตลอดช่วงอายุการใช้งานของแอป เช่น คุณอาจต้องการเพิ่มประสิทธิภาพแอปโดยพิจารณาว่าผู้ใช้ดำเนินการที่เฉพาะเจาะจงด้วยทางลัดบ่อยเพียงใด ในอีกกรณีหนึ่ง คุณอาจเลือกปิดใช้ทางลัดที่ปักหมุดไว้เพื่อป้องกันไม่ให้แอป ดำเนินการที่ล้าสมัยหรือไม่มีอยู่ สำหรับทางลัดที่อ้างอิงในการสนทนา คุณอาจต้องการติดตามการใช้งานเพื่อส่งสัญญาณที่ช่วยปรับปรุงการจัดอันดับทางลัด
หน้านี้จะอธิบายวิธีเหล่านี้และวิธีอื่นๆ ที่ใช้กันทั่วไปในการจัดการทางลัด
ลักษณะการทำงานของทางลัด
ส่วนต่อไปนี้มีข้อมูลทั่วไปเกี่ยวกับลักษณะการทำงานของทางลัด รวมถึงระดับการมองเห็น ลำดับการแสดง และอันดับ
การแสดงทางลัด
ทางลัดแบบคงที่และทางลัดแบบไดนามิกจะปรากฏใน Launcher หรือ ผู้ช่วยที่รองรับเมื่อผู้ใช้ทำท่าทางสัมผัสหรือใช้คำสั่งเสียงที่เฉพาะเจาะจง ในตัวเรียกใช้ที่รองรับ ท่าทางสัมผัสคือการแตะไอคอน Launcher ของแอปค้างไว้ แต่ท่าทางสัมผัสอาจแตกต่างกันในแอปตัวเรียกใช้อื่นๆ เมื่อใช้ Google Assistant คุณจะแสดงทางลัดภายใน Assistant หรือเปิดใช้จากคำสั่งเสียงของผู้ใช้ได้
คลาส LauncherApps มี API สำหรับแอป Launcher เพื่อเข้าถึง ทางลัด
เนื่องจากทางลัดที่ปักหมุดจะปรากฏในตัว Launcher เอง จึงมองเห็นได้เสมอ ระบบจะนำทางลัดที่ปักหมุดออกจากตัวเรียกใช้ในกรณีต่อไปนี้เท่านั้น
- ผู้ใช้นำออก
- ระบบถอนการติดตั้งแอปที่เชื่อมโยงกับทางลัด
- ผู้ใช้ล้างข้อมูลของแอปโดยไปที่การตั้งค่า > แอปและการแจ้งเตือน เลือกแอป แล้วแตะพื้นที่เก็บข้อมูล > ล้างพื้นที่เก็บข้อมูล
เป้าหมายการแชร์คือชุดย่อยของทางลัดแบบไดนามิกที่ปรากฏในแถวการแชร์โดยตรงของชีตการแชร์ของ Android
ลำดับการแสดงทางลัด
เมื่อตัวเรียกใช้แสดงทางลัดของแอป ทางลัดจะต้องปรากฏตามลำดับต่อไปนี้
- ทางลัดแบบคงที่: ทางลัดที่เมธอด
isDeclaredInManifest()แสดงผลtrue - ทางลัดแบบไดนามิก: ทางลัดที่เมธอด
ShortcutInfo.isDynamic()ส่งคืนtrue
ภายในทางลัดแต่ละประเภท ทั้งแบบคงที่และแบบไดนามิก ระบบจะจัดเรียงทางลัดตามอันดับที่เพิ่มขึ้นตามShortcutInfo.getRank Google Assistant
ยังพิจารณาลำดับทางลัดเมื่อกำหนดทางลัดตามบริบทที่จะแสดงต่อผู้ใช้ด้วย
อันดับต้องเป็นจำนวนเต็มที่ไม่ติดลบและเรียงตามลำดับ ระบบจะจัดอันดับทางลัดแบบคงที่จากรายการแรกไปจนถึงรายการสุดท้ายตามลำดับที่ปรากฏในไฟล์ shortcuts.xml สำหรับทางลัดแบบไดนามิก คุณสามารถอัปเดตอันดับของทางลัดที่มีอยู่ได้เมื่อเรียกใช้ updateShortcuts(Context, List), addDynamicShortcuts(Context,
List), pushDynamicShortcut(Context, ShortcutInfoCompat) หรือ setDynamicShortcuts(Context, List)
ลำดับของเป้าหมายการแชร์ขึ้นอยู่กับปัจจัยต่างๆ ซึ่งรวมถึงประวัติของผู้ใช้ในอดีต ความใหม่ ความถี่ คำแนะนำในการจัดอันดับ การใช้งานแอป และลำดับความสำคัญที่ตั้งไว้ในการสนทนาที่เชื่อมโยงกับทางลัดการแชร์ ระบบจะจัดลำดับความสำคัญของเป้าหมายการแชร์
ที่สร้างขึ้นโดยใช้ Sharing Shortcuts API เหนือเป้าหมายการแชร์
ที่สร้างโดย ChooserTargetService ซึ่งเลิกใช้งานไปแล้วใน
Android 11 ใน Android 12 ขึ้นไป เป้าหมายการแชร์ที่สร้างโดย ChooserTargetService ที่เลิกใช้งานแล้วจะไม่ปรากฏในชีตการแชร์อีกต่อไป
โดย Launcher ส่วนใหญ่จะแสดงทางลัดได้สูงสุด 4 รายการ สำหรับชุดค่าผสมของ ทางลัดแบบคงที่และทางลัดแบบไดนามิกที่กำหนดไว้ ตัวเรียกใช้จะแสดง ทางลัดแบบคงที่และทางลัดแบบไดนามิกสูงสุด 2 รายการ เช่น หากคุณ กำหนดทางลัดแบบคงที่ 4 รายการและสร้างทางลัดแบบไดนามิก 3 รายการโดยอัตโนมัติ ตัวเรียกใช้จะแสดงทางลัดแบบคงที่ 2 รายการแรก และทางลัดแบบไดนามิก 2 รายการ ที่มีอันดับสูงสุด
จัดการหลายเจตนาและกิจกรรม
หากต้องการให้แอปดำเนินการหลายอย่างเมื่อผู้ใช้เปิดใช้งาน ทางลัด คุณสามารถกำหนดค่าให้ทริกเกอร์กิจกรรมต่อเนื่องได้ คุณทำได้โดยกำหนด Intent หลายรายการ เริ่มกิจกรรมหนึ่งจากอีกกิจกรรมหนึ่ง หรือตั้งค่าแฟล็ก Intent ทั้งนี้ขึ้นอยู่กับประเภทของทางลัด
เริ่มกิจกรรมหนึ่งจากอีกกิจกรรมหนึ่ง
ทางลัดแบบคงที่ต้องไม่มีค่าสถานะความตั้งใจที่กำหนดเอง Intent แรกของทางลัดแบบคงที่จะมีค่า Intent.FLAG_ACTIVITY_NEW_TASK และ
Intent.FLAG_ACTIVITY_CLEAR_TASK เสมอ ซึ่งหมายความว่าเมื่อแอป
ทํางานอยู่ ระบบจะทําลายกิจกรรมที่มีอยู่ทั้งหมดในแอปเมื่อเปิดใช้
ทางลัดแบบคงที่ หากไม่ต้องการให้เกิดลักษณะการทำงานนี้ คุณสามารถใช้กิจกรรมแทรมโพลีน ซึ่งเป็นกิจกรรมที่มองไม่เห็นซึ่งเริ่มกิจกรรมอื่นได้โดยการเรียกใช้ finish ภายในบล็อกการเปิดตัวหรือ onCreate ก่อนที่จะตั้งค่าเนื้อหา Compose
ใน
AndroidManifest.xml fileให้รวมการกําหนดแอตทริบิวต์android:taskAffinity=""ในกิจกรรมแทรมโพลีนในไฟล์ทรัพยากรทางลัด ให้อ้างอิงกิจกรรมแทรมโพลีนใน Intent ภายในทางลัดแบบคงที่
ดูข้อมูลเพิ่มเติมเกี่ยวกับกิจกรรมที่ใช้ Trampoline ได้ที่ เริ่มกิจกรรมหนึ่งจากอีกกิจกรรมหนึ่ง
ตั้งค่า Flag ของ Intent
คุณสามารถเผยแพร่ทางลัดแบบไดนามิกด้วยชุดค่าสถานะ Intent ใดก็ได้
ควรระบุชุดค่าผสมของ Intent.FLAG_ACTIVITY_SINGLE_TOP และ
Intent.FLAG_ACTIVITY_CLEAR_TOP ใน Intent ของทางลัด ซึ่งจะช่วยให้มั่นใจได้ว่าหาก ComponentActivity ทำงานอยู่แล้ว ระบบจะนำมาไว้เบื้องหน้าและนำกลับมาใช้ใหม่โดยไม่ทำลาย ซึ่งจะช่วยให้สถาปัตยกรรมแบบกิจกรรมเดียวจัดการเหตุการณ์ทางลัดผ่าน onNewIntent() ได้อย่างราบรื่น
ดูข้อมูลเพิ่มเติมเกี่ยวกับงานและแฟล็ก Intent ได้ที่งานและ Back Stack
อัปเดตทางลัด
ไอคอน Launcher ของแต่ละแอปสามารถมีทางลัดแบบคงที่และแบบไดนามิก รวมกันได้สูงสุดเท่ากับค่าที่ getMaxShortcutCountPerActivity แสดงผล แอปสร้าง
ทางลัดที่ปักหมุดได้ไม่จำกัดจำนวน
เมื่อปักหมุดทางลัดแบบไดนามิก แม้ว่าผู้เผยแพร่จะนำทางลัดดังกล่าวออกในฐานะ
ทางลัดแบบไดนามิกแล้ว แต่ทางลัดที่ปักหมุดไว้จะยังคงมองเห็นได้และเปิดใช้ได้ ซึ่งช่วยให้แอปมีทางลัดได้มากกว่า getMaxShortcutCountPerActivity รายการ
ลองดูตัวอย่างต่อไปนี้ ซึ่งสมมติว่าค่าที่ส่งคืนโดย
getMaxShortcutCountPerActivity คือ 4
- แอปแชทเผยแพร่ทางลัดแบบไดนามิก 4 รายการ ซึ่งแสดงถึงการสนทนาล่าสุด 4 รายการ ได้แก่ c1, c2, c3 และ c4
- ผู้ใช้ปักหมุดทางลัดทั้ง 4 รายการ
- ต่อมา ผู้ใช้เริ่มการสนทนาเพิ่มเติม 3 รายการ ได้แก่ c5, c6 และ c7 แอปผู้เผยแพร่จะเผยแพร่แป้นพิมพ์ลัดแบบไดนามิกอีกครั้ง แป้นพิมพ์ลัดแบบไดนามิกใหม่ มีดังนี้ c4, c5, c6 และ c7
แอปต้องนำ c1, c2 และ c3 ออก เนื่องจากแสดงทางลัดแบบไดนามิกได้ไม่เกิน 4 รายการ อย่างไรก็ตาม c1, c2 และ c3 ยังคงเป็นทางลัดที่ปักหมุดไว้ซึ่ง ผู้ใช้สามารถเข้าถึงและเปิดใช้ได้
จากนั้นผู้ใช้จะเข้าถึงทางลัดทั้งหมด 7 รายการที่ลิงก์ไปยังกิจกรรมใน แอปของผู้เผยแพร่โฆษณาได้ เนื่องจากจำนวนทั้งหมดรวมถึงจำนวนสูงสุดของ ทางลัดและทางลัดที่ปักหมุด 3 รายการ
- แอปสามารถใช้
updateShortcuts(Context, List)เพื่ออัปเดตทางลัดที่มีอยู่ทั้ง 7 รายการได้ ตัวอย่างเช่น คุณอาจอัปเดตชุด แป้นพิมพ์ลัดนี้เมื่อไอคอนของเพื่อนร่วมแชทเปลี่ยนไป - คุณสามารถใช้วิธี
addDynamicShortcuts(Context, List)และsetDynamicShortcuts(Context, List)เพื่ออัปเดตทางลัดที่มีอยู่ ด้วยรหัสเดียวกัน อย่างไรก็ตาม คุณจะใช้รายการเหล่านี้เพื่ออัปเดตทางลัดที่ตรึงไว้ซึ่งไม่ใช่แบบไดนามิกไม่ได้ เนื่องจากทั้ง 2 วิธีนี้พยายามแปลงรายการทางลัดที่ระบุให้เป็นทางลัดแบบไดนามิก
ไม่มีการจำกัดจำนวนทางลัดที่สามารถพุชเพื่อแสดงในแอป Assistant เช่น Google Assistant ใช้เมธอด pushDynamicShortcut
ของไลบรารี ShortcutManagerCompat Jetpack เพื่อสร้างและอัปเดต
ทางลัดสำหรับใช้ในแอปผู้ช่วย นอกจากนี้ ให้เพิ่มไลบรารีการผสานรวมทางลัดของ Google ลงในแอปเพื่อให้ลิงก์แบบไดนามิกมีสิทธิ์ปรากฏใน Google
Assistant
ดูข้อมูลเพิ่มเติมเกี่ยวกับหลักเกณฑ์สำหรับทางลัดของแอป รวมถึงการอัปเดตทางลัดได้ที่แนวทางปฏิบัติแนะนำสำหรับทางลัด
จัดการการเปลี่ยนแปลงภาษาของระบบ
แอปต้องอัปเดตทางลัดแบบไดนามิกและทางลัดที่ปักหมุดไว้เมื่อได้รับข้อความออกอากาศ Intent.ACTION_LOCALE_CHANGED ที่ระบุการเปลี่ยนแปลงภาษาของระบบ
ติดตามการใช้แป้นพิมพ์ลัด
หากต้องการพิจารณาสถานการณ์ที่ทางลัดแบบคงที่และแบบไดนามิกปรากฏขึ้น
ตัวเรียกใช้จะตรวจสอบประวัติการเปิดใช้งานของทางลัด สำหรับทางลัดแบบคงที่
คุณสามารถติดตามเวลาที่ผู้ใช้ดำเนินการที่เฉพาะเจาะจงภายในแอปได้โดย
เรียกใช้เมธอด reportShortcutUsed และส่งรหัสของ
ทางลัดไปยังเมธอดดังกล่าวเมื่อเกิดเหตุการณ์ต่อไปนี้
- ผู้ใช้เลือกทางลัดที่มีรหัสที่ระบุ
- ภายในแอป ผู้ใช้จะดำเนินการที่สอดคล้องกับ ทางลัดเดียวกันให้เสร็จสมบูรณ์ด้วยตนเอง
แอปของคุณจะติดตามการใช้งานทางลัดแบบไดนามิกโดยการเรียกใช้เมธอด pushDynamicShortcut
และส่งรหัสของทางลัดเมื่อเกิดเหตุการณ์ที่เกี่ยวข้อง
การกระตุ้นการใช้ทางลัดแบบไดนามิกด้วยวิธีนี้จะช่วยให้แอป Assistant เช่น Google Assistant
แนะนำทางลัดที่เกี่ยวข้องแก่ผู้ใช้ได้ เนื่องจากเมธอด pushDynamicShortcut จะรายงานการใช้งานเมื่อมีการเรียกใช้ จึงไม่ต้องเรียกใช้เมธอด reportShortcutUsed สำหรับแป้นพิมพ์ลัดเดียวกัน
สำหรับทางลัดที่เกี่ยวข้องกับการสนทนา คุณควรติดตามการใช้งานสำหรับข้อความขาออก และขาเข้า โปรดดูรายละเอียดในแนวทางปฏิบัติแนะนำสำหรับผู้ใช้และการสนทนา
ปิดใช้แป้นพิมพ์ลัด
เนื่องจากแอปและผู้ใช้สามารถปักหมุดทางลัดไปยังตัวเรียกใช้ของอุปกรณ์ได้ จึงเป็นไปได้ที่ทางลัดที่ปักหมุดเหล่านี้จะนำผู้ใช้ไปยังการดำเนินการภายในแอปที่ล้าสมัยหรือไม่มีอยู่อีกต่อไป หากต้องการจัดการสถานการณ์นี้ คุณสามารถ
ปิดใช้ทางลัดที่ไม่ต้องการให้ผู้ใช้เลือกได้โดยการเรียกใช้
disableShortcuts ซึ่งจะนำทางลัดที่ระบุออกจากรายการทางลัดแบบคงที่
และแบบไดนามิก รวมถึงปิดใช้สำเนาที่ปักหมุดของทางลัดเหล่านี้ นอกจากนี้ คุณยังใช้เวอร์ชันที่โอเวอร์โหลดของเมธอดนี้ซึ่งยอมรับ CharSequence เป็นข้อความแสดงข้อผิดพลาดที่กำหนดเองได้ด้วย จากนั้นข้อความแสดงข้อผิดพลาดจะปรากฏขึ้น
เมื่อผู้ใช้พยายามเปิดใช้ทางลัดที่ปิดใช้
การจำกัดอัตราคำขอ
เมื่อใช้เมธอด setDynamicShortcuts, addDynamicShortcuts หรือ updateShortcuts
คุณอาจเรียกใช้เมธอดเหล่านี้ได้เพียงจำนวนครั้งที่กำหนด
ในแอปที่ทำงานอยู่เบื้องหลัง ซึ่งเป็นแอปที่ไม่มีกิจกรรมหรือบริการที่ทำงานอยู่เบื้องหน้า
การจำกัดจำนวนครั้งที่คุณเรียกใช้เมธอดเหล่านี้ได้เรียกว่าการจำกัดอัตราคำขอ ฟีเจอร์นี้ช่วยป้องกันไม่ให้ ShortcutManagerCompat ใช้ทรัพยากรของอุปกรณ์มากเกินไป
เมื่อการจำกัดอัตราคำขอทำงาน isRateLimitingActive จะแสดงผลเป็นจริง
อย่างไรก็ตาม ระบบจะรีเซ็ตการจำกัดอัตราคำขอในระหว่างกิจกรรมบางอย่าง ดังนั้นแม้แอปที่ทำงานเบื้องหลัง ก็สามารถเรียกใช้เมธอด ShortcutManager ได้จนกว่าจะถึงขีดจำกัดอัตราคำขออีกครั้ง โดยเหตุการณ์เหล่านี้มีดังนี้
- แอปมาที่เบื้องหน้า
- ภาษาของระบบมีการเปลี่ยนแปลง
- ผู้ใช้ดำเนินการตอบกลับในบรรทัดในการแจ้งเตือน
หากพบการจำกัดอัตราในระหว่างการพัฒนาหรือการทดสอบ คุณสามารถเลือกตัวเลือกสำหรับนักพัฒนาแอป > รีเซ็ตการจำกัดอัตราของ ShortcutManager จากการตั้งค่า
ของอุปกรณ์ หรือป้อนคำสั่งต่อไปนี้ใน adb
$ adb shell cmd shortcut reset-throttling [ --user <var>your-user-id</var> ]
การสำรองและคืนค่า
คุณอนุญาตให้ผู้ใช้ดำเนินการสำรองและกู้คืนข้อมูลในแอปได้เมื่อเปลี่ยนอุปกรณ์โดยรวมการกำหนดแอตทริบิวต์ android:allowBackup="true" ไว้ในไฟล์ Manifest ของแอป หากคุณรองรับการสำรองข้อมูลและคืนค่า โปรดคำนึงถึงประเด็นต่อไปนี้เกี่ยวกับทางลัดของแอป
- ระบบจะเผยแพร่ทางลัดแบบคงที่อีกครั้งโดยอัตโนมัติ แต่จะเผยแพร่หลังจากที่ผู้ใช้ ติดตั้งแอปของคุณอีกครั้งในอุปกรณ์เครื่องใหม่เท่านั้น
- ระบบจะไม่สำรองข้อมูลทางลัดแบบไดนามิก ดังนั้นให้ใส่ตรรกะในแอปเพื่อ เผยแพร่ซ้ำเมื่อผู้ใช้เปิดแอปในอุปกรณ์ใหม่
- ระบบจะกู้คืนทางลัดที่ปักหมุดไปยัง Launcher ของอุปกรณ์โดยอัตโนมัติ แต่ ระบบจะไม่สำรองข้อมูลไอคอนที่เชื่อมโยงกับทางลัดที่ปักหมุด ดังนั้น ให้บันทึกรูปภาพของทางลัดที่ปักหมุดไว้ในแอปเพื่อให้กู้คืนในอุปกรณ์เครื่องใหม่ได้อย่างรวดเร็ว
ข้อมูลโค้ดต่อไปนี้แสดงวิธีที่ดีที่สุดในการกู้คืนทางลัดแบบไดนามิกของแอป และวิธีตรวจสอบว่าระบบได้เก็บรักษาทางลัดที่ปักหมุดของแอปไว้หรือไม่
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
if (ShortcutManagerCompat.getDynamicShortcuts(this).isEmpty()) {
// Application restored. Re-publish dynamic shortcuts.
if (ShortcutManagerCompat.getPinnedShortcuts(this).isNotEmpty()) {
// Pinned shortcuts are restored. Use updateShortcuts() to make
// sure they contain up-to-date information.
}
}
}
// ...
}