สร้างทางลัด

ทางลัดจะแสดงเนื้อหาบางประเภทต่อผู้ใช้โดยช่วยให้ผู้ใช้เข้าถึงส่วนต่างๆ ของแอปได้อย่างรวดเร็ว

ความแตกต่างระหว่างทางลัดของแอปกับทางลัดที่ปักหมุด
รูปที่ 1 ทางลัดของแอปและทางลัดที่ปักหมุดไว้

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

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

สร้างทางลัดแบบคงที่

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

วิธีสร้างทางลัดแบบคงที่

  1. ในไฟล์ AndroidManifest.xml ของแอป ให้หากิจกรรมที่มีตัวกรอง Intent ตั้งค่าเป็นการดำเนินการ android.intent.action.MAIN และหมวดหมู่ android.intent.category.LAUNCHER
  2. เพิ่มองค์ประกอบ <meta-data> ลงในกิจกรรมนี้ซึ่งอ้างอิงถึง ไฟล์ทรัพยากรที่มีการกำหนดทางลัดของแอป

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
              package="com.example.myapplication">
      <application ... >
        <activity android:name="Main">
          <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
          </intent-filter>
          <meta-data android:name="android.app.shortcuts"
                     android:resource="@xml/shortcuts" />
        </activity>
      </application>
    </manifest>
    
  3. สร้างไฟล์ทรัพยากรใหม่ชื่อ res/xml/shortcuts.xml

  4. ในไฟล์ทรัพยากรใหม่ ให้เพิ่มองค์ประกอบรูท <shortcuts> ที่มีรายการองค์ประกอบ <shortcut> ในองค์ประกอบ <shortcut> แต่ละรายการ ให้ใส่ข้อมูลเกี่ยวกับทางลัดแบบคงที่ ซึ่งรวมถึงไอคอน ป้ายกำกับคำอธิบาย และ Intent ที่เปิดใช้ภายในแอป

    <shortcuts xmlns:android="http://schemas.android.com/apk/res/android">
      <shortcut
        android:shortcutId="compose"
        android:enabled="true"
        android:icon="@drawable/compose_icon"
        android:shortcutShortLabel="@string/compose_shortcut_short_label1"
        android:shortcutLongLabel="@string/compose_shortcut_long_label1"
        android:shortcutDisabledMessage="@string/compose_disabled_message1">
        <intent
          android:action="android.intent.action.VIEW"
          android:targetPackage="com.example.myapplication"
          android:targetClass="com.example.myapplication.Main" />
        <!-- If your shortcut is associated with multiple intents, include them
             here. The last intent in the list determines what the user sees when
             they launch this shortcut. -->
        <categories android:name="android.shortcut.conversation" />
        <capability-binding android:key="actions.intent.CREATE_MESSAGE" />
      </shortcut>
      <!-- Specify more shortcuts here. -->
    </shortcuts>
    

ปรับแต่งค่าแอตทริบิวต์

รายการต่อไปนี้มีคำอธิบายสำหรับแอตทริบิวต์ต่างๆ ภายใน ทางลัดแบบคงที่ ระบุค่าสำหรับ android:shortcutId และ android:shortcutShortLabel ค่าอื่นๆ ทั้งหมดเป็นตัวเลือก

android:shortcutId

สตริงลิเทอรัลที่แสดงแป้นพิมพ์ลัดเมื่อออบเจ็กต์ ShortcutManager ดำเนินการกับสตริงดังกล่าว

android:shortcutShortLabel

วลีที่กระชับซึ่งอธิบายวัตถุประสงค์ของทางลัด หากเป็นไปได้ ให้จำกัดคำอธิบายสั้นๆ นี้ไว้ที่ 10 อักขระ

ดูข้อมูลเพิ่มเติมได้ที่ setShortLabel()

android:shortcutLongLabel

วลีแบบขยายที่อธิบายวัตถุประสงค์ของทางลัด หากมีพื้นที่เพียงพอ ตัวเรียกใช้จะแสดงค่านี้แทน android:shortcutShortLabel หากเป็นไปได้ ให้จำกัดคำอธิบายแบบยาวนี้ ไม่เกิน 25 อักขระ

ดูข้อมูลเพิ่มเติมได้ที่ setLongLabel()

android:shortcutDisabledMessage

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

android:enabled

กำหนดว่าผู้ใช้จะโต้ตอบกับทางลัด จาก Launcher ที่รองรับได้หรือไม่ ค่าเริ่มต้นของ android:enabled คือ true หากตั้งค่าเป็น false ให้ตั้งค่า android:shortcutDisabledMessage ที่ อธิบายเหตุผลที่คุณปิดใช้ทางลัด หากคุณไม่คิดว่าจำเป็นต้อง ระบุข้อความดังกล่าว ให้นำทางลัดออกจากไฟล์ XML ทั้งหมด

android:icon

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

กำหนดค่าองค์ประกอบด้านใน

ไฟล์ XML ที่แสดงทางลัดแบบคงที่ของแอปจะรองรับองค์ประกอบต่อไปนี้ ภายในองค์ประกอบ <shortcut> แต่ละรายการ คุณต้องใส่เอลิเมนต์ด้านใน intent สำหรับทางลัดแบบคงที่แต่ละรายการที่คุณกำหนด

intent

การดำเนินการที่ระบบจะเปิดเมื่อผู้ใช้เลือก ทางลัด ความตั้งใจนี้ต้องระบุค่าสำหรับแอตทริบิวต์ android:action

คุณระบุ Intent หลายรายการสำหรับทางลัดเดียวได้ ดูรายละเอียดได้ที่จัดการ Intent และกิจกรรมหลายรายการ ตั้งค่า Intent และข้อมูลอ้างอิงของคลาส TaskStackBuilder

categories

จัดกลุ่มประเภทการดำเนินการที่ทางลัดของแอป ทำ เช่น การสร้างข้อความแชทใหม่

ดูรายการหมวดหมู่ทางลัดที่รองรับได้ในข้อมูลอ้างอิงของคลาส ShortcutInfo

capability-binding

ประกาศ capability ที่ลิงก์กับทางลัด

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

สร้างทางลัดแบบไดนามิก

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

ไลบรารี ShortcutManagerCompat Jetpack เป็นตัวช่วยสำหรับ API ของ ShortcutManager ซึ่งช่วยให้คุณจัดการทางลัดแบบไดนามิกในแอปได้ การใช้ไลบรารี ShortcutManagerCompat จะช่วยลดโค้ด Boilerplate และช่วยให้มั่นใจว่าทางลัดจะทำงานได้อย่างสอดคล้องกันใน Android เวอร์ชันต่างๆ นอกจากนี้ คุณยังต้องใช้ไลบรารีนี้เพื่อพุชทางลัดแบบไดนามิกเพื่อให้มีสิทธิ์ ปรากฏบนแพลตฟอร์มของ Google เช่น Assistant ด้วยไลบรารีการผสานรวมทางลัดของ Google

API ของ ShortcutManagerCompat ช่วยให้แอปของคุณดำเนินการต่อไปนี้ ด้วยทางลัดแบบไดนามิกได้

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

ดูข้อมูลเพิ่มเติมเกี่ยวกับการดำเนินการกับทางลัดได้ที่จัดการ ทางลัดและข้อมูลอ้างอิงของ ShortcutManagerCompat

ต่อไปนี้เป็นตัวอย่างการสร้างทางลัดแบบไดนามิกและการเชื่อมโยงกับแอป

val shortcut = ShortcutInfoCompat.Builder(context, "id1")
        .setShortLabel("Website")
        .setLongLabel("Open the website")
        .setIcon(IconCompat.createWithResource(context, R.drawable.icon_website))
        .setIntent(Intent(Intent.ACTION_VIEW,
                Uri.parse("https://www.mysite.example.com/")))
        .build()

ShortcutManagerCompat.pushDynamicShortcut(context, shortcut)

เพิ่มไลบรารีการผสานรวมทางลัดของ Google

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

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

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

ไลบรารีการผสานรวมทางลัดของ Google ไม่ได้มีฟังก์ชันการทำงานที่สามารถระบุได้ ด้วยตัวมันเอง การเพิ่มไลบรารีนี้ลงในแอปจะช่วยให้แพลตฟอร์มต่างๆ ของ Google รับ ทางลัดที่แอปพุชโดยใช้ ShortcutManagerCompat ได้

หากต้องการใช้ไลบรารีนี้ในแอป ให้ทำตามขั้นตอนต่อไปนี้

  1. อัปเดตไฟล์ gradle.properties เพื่อรองรับไลบรารี AndroidX ดังนี้

    android.useAndroidX=true
    # Automatically convert third-party libraries to use AndroidX
    android.enableJetifier=true
    
  2. ใน app/build.gradle ให้เพิ่มการอ้างอิงสำหรับไลบรารีการผสานรวมทางลัดของ Google และ ShortcutManagerCompat ดังนี้

    dependencies {
      implementation "androidx.core:core:1.6.0"
      implementation 'androidx.core:core-google-shortcuts:1.0.0'
      ...
    }
    

เมื่อเพิ่มทรัพยากร Dependency ของไลบรารีลงในโปรเจ็กต์ Android แล้ว แอปจะใช้เมธอด pushDynamicShortcut() จาก ShortcutManagerCompat เพื่อพุชทางลัดแบบไดนามิกที่มีสิทธิ์แสดงใน Launcher และแพลตฟอร์มต่างๆ ของ Google ที่เข้าร่วมได้

สร้างทางลัดที่ปักหมุดไว้

ใน Android 8.0 (ระดับ API 26) ขึ้นไป คุณจะสร้างทางลัดที่ปักหมุดได้ ทางลัดที่ปักหมุดจะปรากฏในตัวเรียกใช้ที่รองรับเป็นไอคอนแยกต่างหาก ซึ่งต่างจากทางลัดแบบคงที่และแบบไดนามิก รูปที่ 1 แสดงความแตกต่างระหว่างทางลัด 2 ประเภทนี้

หากต้องการปักหมุดทางลัดไปยัง Launcher ที่รองรับโดยใช้แอป ให้ทำตามขั้นตอนต่อไปนี้

  1. ใช้ isRequestPinShortcutSupported() เพื่อยืนยันว่าตัวเรียกใช้เริ่มต้นของอุปกรณ์รองรับการปักหมุดทางลัดในแอป
  2. สร้างออบเจ็กต์ ShortcutInfo ได้ 2 วิธี โดยขึ้นอยู่กับว่ามีทางลัดหรือไม่ ดังนี้

    1. หากมีทางลัดอยู่แล้ว ให้สร้างออบเจ็กต์ ShortcutInfo ที่มี เฉพาะรหัสของทางลัดที่มีอยู่ ระบบจะค้นหาและปักหมุดข้อมูลอื่นๆ ทั้งหมดที่เกี่ยวข้องกับทางลัดโดยอัตโนมัติ
    2. หากต้องการปักหมุดทางลัดใหม่ ให้สร้างShortcutInfoออบเจ็กต์ที่มี รหัส อินเทนต์ และป้ายกำกับแบบย่อสำหรับทางลัดใหม่
  3. ปักหมุดทางลัดไปยัง Launcher ของอุปกรณ์โดยเรียกใช้ requestPinShortcut() ในกระบวนการนี้ คุณสามารถส่งออบเจ็กต์ PendingIntent ซึ่งจะแจ้งเตือนแอปของคุณเมื่อปักหมุดทางลัดสำเร็จเท่านั้น

    หลังจากปักหมุดทางลัดแล้ว แอปจะอัปเดตเนื้อหาได้โดยใช้วิธี updateShortcuts() ดูข้อมูลเพิ่มเติมได้ที่อัปเดต ทางลัด

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

val shortcutManager = getSystemService<ShortcutManager>()

if (shortcutManager!!.isRequestPinShortcutSupported) {
    // Enable the existing shortcut with the ID "my-shortcut".
    val pinShortcutInfo = ShortcutInfo.Builder(context, "my-shortcut").build()

    // Create the PendingIntent object only if your app needs to be notified
    // that the user let the shortcut be pinned. If the pinning operation fails,
    // your app isn't notified. Assume here that the app implements a method
    // called createShortcutResultIntent() that returns a broadcast intent.
    val pinnedShortcutCallbackIntent = shortcutManager.createShortcutResultIntent(pinShortcutInfo)

    // Configure the intent so that your app's broadcast receiver gets the
    // callback successfully. For details, see PendingIntent.getBroadcast().
    val successCallback = PendingIntent.getBroadcast(context, /* request code */ 0,
            pinnedShortcutCallbackIntent, /* flags */ 0)

    shortcutManager.requestPinShortcut(pinShortcutInfo,
            successCallback.intentSender)
}

สร้างกิจกรรมทางลัดที่กำหนดเอง

กิจกรรมกล่องโต้ตอบที่กำหนดเองซึ่งแสดงข้อความแจ้งว่า &quot;คุณต้องการเพิ่มไอคอน Launcher ของ Gmail ลงในหน้าจอหลักไหม&quot; ตัวเลือกที่กำหนดเองคือ &quot;ไม่เป็นไร&quot; และ &quot;เพิ่มไอคอน&quot;
รูปที่ 2 ตัวอย่างกิจกรรมกล่องโต้ตอบทางลัดแอปที่กำหนดเอง

นอกจากนี้ คุณยังสร้างกิจกรรมเฉพาะทางที่จะช่วยให้ผู้ใช้สร้างทางลัดได้ พร้อมตัวเลือกที่กำหนดเองและปุ่มยืนยัน รูปที่ 2 แสดง ตัวอย่างกิจกรรมประเภทนี้ในแอป Gmail

ในไฟล์ Manifest ของแอป ให้เพิ่ม ACTION_CREATE_SHORTCUT ลงในองค์ประกอบ <intent-filter> ของกิจกรรม การประกาศนี้จะตั้งค่าลักษณะการทำงานต่อไปนี้ เมื่อผู้ใช้พยายามสร้างทางลัด

  1. ระบบจะเริ่มกิจกรรมเฉพาะของแอป
  2. ผู้ใช้ตั้งค่าตัวเลือกสำหรับทางลัด
  3. ผู้ใช้เลือกปุ่มยืนยัน
  4. แอปของคุณสร้างทางลัดโดยใช้เมธอด createShortcutResultIntent() เมธอดนี้จะแสดง Intent ซึ่งแอปจะส่งต่อกลับไปยัง กิจกรรมที่ดำเนินการก่อนหน้านี้โดยใช้ setResult()
  5. แอปของคุณเรียกใช้ finish() ในกิจกรรมที่ใช้สร้าง ทางลัดที่กำหนดเอง

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

ทดสอบแป้นพิมพ์ลัด

หากต้องการทดสอบทางลัดของแอป ให้ติดตั้งแอปในอุปกรณ์ที่มี Launcher ที่ รองรับทางลัด จากนั้นให้ดำเนินการต่อไปนี้

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